我是用研究生R和一直在阅读关于去除含有NA从dataframes行其他堆栈溢出的答案。 我曾经尝试都na.omit和complete.cases。 当同时使用这表明,随着NA行已被删除,但是当我写总结(data.frame)仍然包含在NAS。 用Na2SO4行实际删除或者我这样做不对?
na.omit(Perios)
summary(Perios)
Perios[complete.cases(Perios),]
summary(Perios)
我是用研究生R和一直在阅读关于去除含有NA从dataframes行其他堆栈溢出的答案。 我曾经尝试都na.omit和complete.cases。 当同时使用这表明,随着NA行已被删除,但是当我写总结(data.frame)仍然包含在NAS。 用Na2SO4行实际删除或者我这样做不对?
na.omit(Perios)
summary(Perios)
Perios[complete.cases(Perios),]
summary(Perios)
该错误是,你居然没有输出从分配na.omit
!
Perios < - na.omit(Perios)
如果你知道发生在哪一列在NAS,那么你可以这样做
Perios [!is.na(Perios $骨膜炎)]
或者更一般地说:
Perios[!is.na(Perios$colA) & !is.na(Perios$colD) & ... ,]
然后与R一般的安全提示,扔在一个na.fail断言它的工作:
na.fail(Perios) # trust, but verify! Die Paranoia ist gesund.
is.na
是不正确的功能。 你想complete.cases
,你想complete.cases
这是等效function(x) apply(is.na(x), 1, all)
或na.omit
来过滤数据:
也就是说,你想那里有没有都行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