移除数据框架中所有或部分NA(缺失值)的行。

我想删除这个数据框中的线。

a) 包含所有列的 "NA"。下面是我的数据框架示例。

             gene hsap mmul mmus rnor cfam
1 ENSG00000208234    0   NA   NA   NA   NA
2 ENSG00000199674    0   2    2    2    2
3 ENSG00000221622    0   NA   NA   NA   NA
4 ENSG00000207604    0   NA   NA   1    2
5 ENSG00000207431    0   NA   NA   NA   NA
6 ENSG00000221312    0   1    2    3    2

基本上,我想得到一个数据框架,如以下内容。

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
6 ENSG00000221312    0   1    2    3    2

b) **只在某些列中包含NA,所以我也可以得到这样的结果。

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
4 ENSG00000207604    0   NA   NA   1    2
6 ENSG00000221312    0   1    2    3    2
解决办法

同时检查 [complete.cases] (http://stat.ethz.ch/R-manual/R-patched/library/stats/html/complete.cases.html) :

> final[complete.cases(final), ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
6 ENSG00000221312    0    1    2    3    2

na.省略'更适合于只删除所有的NA's。complete.cases`允许部分选择,只包括数据框架的某些列。

> final[complete.cases(final[ , 5:6]),]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2

你的解决方案不可能成功。如果你坚持使用is.na,那么你必须做一些事情。

> final[rowSums(is.na(final[ , 5:6])) == 0, ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2

但使用 "complete.cases "会更清楚,也更快。

评论(10)

试试na.omit(your.data.frame)。至于第二个问题,试着把它作为另一个问题发布(为了清晰)。

评论(3)

我更喜欢用下面的方法来检查行中是否包含任何NA。


row.has.na 
评论(2)