6

在一个矩阵中,如果有一些缺失的数据记录为`NA。

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

3 回答 3

7

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

> 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
于 2009-09-08T17:39:15.513 回答
6

我认为na.rm通常只在函数中起作用,比如平均函数。我会选择complete.caseshttp ://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 -函数返回一个真值向量,表示一个案例是否完整:

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

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

于 2009-09-08T17:30:58.620 回答
1

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

goodIdx <- apply(x, 1, function(r) !any(is.na(r)))
newX <- x[goodIdx,]
于 2009-09-08T17:27:54.947 回答