有关缺失数据的问题

时间:2009-09-08 17:21:51

标签: r matrix na

在矩阵中,如果有一些丢失的数据记录为“NA。

  • 如何删除矩阵中带有NA的行?
  • 我可以使用na.rm吗?

3 个答案:

答案 0 :(得分:6)

na.omit()将采用矩阵(和数据框)并仅返回那些没有NA值的行 - 通过为您删除FALSE行,需要complete.cases()更进一步。

> x <- data.frame(c(1,2,3), c(4, NA, 6))
> x
  c.1..2..3. c.4..NA..6.
1          1           4
2          2          NA
3          3           6
> na.omit(x)
  c.1..2..3. c.4..NA..6.
1          1           4
3          3           6

答案 1 :(得分:5)

我认为 na.rm 通常只适用于函数,例如 mean 函数。我会选择 complete.cases http://stat.ethz.ch/R-manual/R-patched/library/stats/html/complete.cases.htm

假设你有以下3x3矩阵:

x <- matrix(c(1:8, NA), 3, 3)

> x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6   NA

然后您可以使用

获取此矩阵的完整案例
y <- x[complete.cases(x),]

> y
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8

complete.cases -function返回一个真值的向量,表明案例是否完整:

> complete.cases(x)
[1]  TRUE  TRUE FALSE

然后索引矩阵 x 的行并添加“,”以表示您想要所有列。

答案 2 :(得分:1)

如果要删除包含NA的行,可以使用apply()应用快速函数来检查每一行。例如,如果你的矩阵是x,

goodIdx <- apply(x, 1, function(r) !any(is.na(r)))
newX <- x[goodIdx,]