我是一名使用R的研究生,已经阅读了其他有关从数据帧中删除包含NA的行的Stack Overflow答案。我已经尝试了na.omit和complete.cases。当两者都使用时,它表明带有NA的行已被删除,但是当我编写summary(data.frame)时,它仍然包含NA。带有NA的行实际上已删除还是我做错了?
na.omit(Perios)
summary(Perios)
Perios[complete.cases(Perios),]
summary(Perios)
na.omit
的输出!Perios <- na.omit(Perios)
如果您知道NA出现在哪一列,那么您可以这样做
Perios[!is.na(Perios$Periostitis),]
或更笼统地说:
Perios[!is.na(Perios$colA) & !is.na(Perios$colD) & ... ,]
然后作为R的一般安全提示,输入na.fail断言其有效:
na.fail(Perios) # trust, but verify! Die Paranoia ist gesund.
NA
值的所有行。< x <- data.frame(a=c(1,2,NA), b=c(3,NA,NA))
> x
a b
1 1 3
2 2 NA
3 NA NA
> x[complete.cases(x),]
a b
1 1 3
> na.omit(x)
a b
1 1 3
然后将其分配回x
以保存数据。
complete.cases
返回向量,输入数据帧的每一行一个元素。另一方面,is.na
返回一个矩阵。这不适用于返回完整案例,但可以将所有非NA值作为向量返回:
> is.na(x) a b [1,] FALSE FALSE [2,] FALSE TRUE [3,] TRUE TRUE > x[!is.na(x)] [1] 1 2 3