首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除data.frame中全部或部分NAs (缺失值)的行

删除data.frame中全部或部分NAs (缺失值)的行
EN

Stack Overflow用户
提问于 2011-02-01 11:52:31
回答 18查看 2.2M关注 0票数 1K

我想删除这个数据框架中的行:

( a)在所有列中都包含NA**s。**下面是我的示例数据框架。

代码语言:javascript
复制
             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

基本上,我希望得到一个数据框架,如下所示。

代码语言:javascript
复制
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
6 ENSG00000221312    0   1    2    3    2

( b) 只在某些列**中包含,因此我还可以得到以下结果:

代码语言:javascript
复制
             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
EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-02-01 12:21:42

还可以查看complete.cases

代码语言:javascript
复制
> 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.omit更适合于仅删除所有NA的. complete.cases只包括数据数据的某些列,从而允许部分选择:

代码语言:javascript
复制
> 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,则必须执行以下操作:

代码语言:javascript
复制
> 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要清楚得多,而且速度更快。

票数 1.3K
EN

Stack Overflow用户

发布于 2011-02-01 12:00:44

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

票数 311
EN

Stack Overflow用户

发布于 2016-08-16 08:49:23

tidyr有一个新的函数drop_na

代码语言:javascript
复制
library(tidyr)
df %>% drop_na()
#              gene hsap mmul mmus rnor cfam
# 2 ENSG00000199674    0    2    2    2    2
# 6 ENSG00000221312    0    1    2    3    2
df %>% drop_na(rnor, cfam)
#              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
票数 212
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4862178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档