[R] how to substitute missing values (NAs) by the group means
Henrique Dallazuanna
wwwhsd at gmail.com
Tue Jun 9 04:24:02 CEST 2009
Try this:
d$traits[is.na(d$traits)] <- ave(d$traits,
d$group,
FUN=function(x)mean(x,
na.rm = T))[is.na(d$traits)]
On 6/8/09, Mao Jianfeng <jianfeng.mao at gmail.com> wrote:
> Dear Ruser's
>
> I ask for helps on how to substitute missing values (NAs) by mean of the
> group it is belonging to.
>
> my dummy dataframe is:
>
>> df
> group traits
> 1 BSPy01-10 NA
> 2 BSPy01-10 7.3
> 3 BSPy01-10 7.3
> 4 BSPy01-11 5.3
> 5 BSPy01-11 5.4
> 6 BSPy01-11 5.6
> 7 BSPy01-11 NA
> 8 BSPy01-11 NA
> 9 BSPy01-11 4.8
> 10 BSPy01-12 8.1
> 11 BSPy01-12 6.0
> 12 BSPy01-12 6.0
> 13 BSPy01-13 6.1
>
>
> I want to substitute each "NA" by the group mean of which the "NA" is
> belonging to. For example, substitute the first record of traits "NA" by the
> mean of "BSPy01-10".
>
> I have ever tried to solve this problem by using doBy package. But, I
> failed. I ask for the right solutions by using doBy package or not.
>
> The commands used and the output I got are as followed:
>
> library(doBy)
> df<-orderBy(~group,data=df) # succeeded
> f1<-function(x){m<-mean(x, na.ram=TRUE); x[is.na(x)]<-m; x} # succeeded
> datatraits<-lapplyBy(traits~group,data=df, FUN=f1(traits)) # failed
> errors: mean(x, na.ram = TRUE), can not find 'traits'.
>
> Thanks in advance.
>
> Sincerely,
>
> Mao J-F
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
More information about the R-help
mailing list