【发布时间】:2010-11-26 13:57:52
【问题描述】:
在一个矩阵中,如果有一些缺失的数据记录为`NA。
- 如何删除矩阵中带有
NA的行? - 我可以使用
na.rm吗?
【问题讨论】:
在一个矩阵中,如果有一些缺失的数据记录为`NA。
NA 的行? na.rm吗?【问题讨论】:
如果要删除包含 NA 的行,可以使用 apply() 应用快速函数来检查每一行。例如,如果你的矩阵是 x,
goodIdx <- apply(x, 1, function(r) !any(is.na(r)))
newX <- x[goodIdx,]
【讨论】:
我认为 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-函数返回一个真值向量,表明一个案例是否完整:
> complete.cases(x)
[1] TRUE TRUE FALSE
然后你索引矩阵 x 的行并添加“,”表示你想要所有列。
【讨论】:
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
【讨论】: