用行平均值替换NA

时间:2015-07-21 20:00:23

标签: r mean

我有以下数据框:

i1<-c(5,4,3,4,5)
i2<-c(4,NA,NA,5,3)
i3<-c(NA,4,4,4,5)
i4<-c(3,5,5,NA,2)
dat<-as.data.frame(cbind(i1,i2,i3,i4))
dat
  i1 i2 i3 i4
1  5  4 NA  3
2  4 NA  4  5
3  3 NA  4  5
4  4  5  4 NA
5  5  3  5  2

我的目标是将NA替换为行均值来获取:

> dat
   i1     i2 i3     i4
1  5 4.0000  4 3.0000
2  4 4.3333  4 5.0000
3  3 4.0000  4 5.0000
4  4 5.0000  4 4.3333
5  5 3.0000  5 2.0000

我目前有以下代码:

dat1<- which(is.na(dat), arr.ind=TRUE)
dat[dat1] <- rowMeans(dat, na.rm=TRUE)[dat1[,1]]

哪个产生了预期的结果;但是,我只是想知道是否有更好的方法来做到这一点,并且还要保留行名和列名(行将在最终产品中有名称)。谢谢。

1 个答案:

答案 0 :(得分:3)

尝试

(is.na(dat))*rowMeans(dat, na.rm=TRUE)[row(dat)] + replace(dat, is.na(dat), 0)
#  i1       i2 i3       i4
#1  5 4.000000  4 3.000000
#2  4 4.333333  4 5.000000
#3  3 4.000000  4 5.000000
#4  4 5.000000  4 4.333333
#5  5 3.000000  5 2.000000