按行方式替换NA值

时间:2011-08-02 20:21:28

标签: r

我想从以下获取的矩阵中替换我的NA值:

read.table(…)

这些值应该是相应行的平均值。

即表格的下一行:

1 2 1 NA 2 1 1 2

会变成

1 2 1 1.43 2 1 2

谢谢。

3 个答案:

答案 0 :(得分:24)

以下是一些示例数据。

m <- matrix(1:16, nrow=4)
m[c(1,4,6,11,16)] <- NA

这就是我用行方法填写缺失的方法。

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

您的数据将在data.frame;您必须先使用as.matrix转换为矩阵。您可能希望也可能不希望以此格式保留它;转换回使用as.data.frame

答案 1 :(得分:5)

x[is.na(x)] <- mean(x, na.rm=TRUE)  # for vectors or for a matrix as a whole

t( apply(x, 1, function(xv) { xv[is.na(xv)] <- 
                                    mean(xv, na.rm=TRUE)
                              return(xv)}
          ) ) # for a row-oriented sol'n

答案 2 :(得分:1)

a = c(NA, 1, 2, 3, 10)
a[which(is.na(a)==TRUE)] = mean(a,na.rm = T)