我有一个看起来像这样的文件:
date A B
2014-01-01 2 3
2014-01-02 5 NA
2014-01-03 NA NA
2014-01-04 7 11
如果我使用
newdata <- na.omit(data)
哪里data
上表是通过R加载的,那么我只得到两个数据点。我明白了,因为它会过滤 NA 的所有实例。我想做的是过滤每个A
和 B
以便我获得 A
的三个数据点并且只有两个 B
.显然,我的主要数据集比这大得多,而且数字不同,但两者都无关紧要。我怎样才能做到这一点?
最佳答案
使用 is.na()
在您希望查找和索引的相关数据向量上使用否定结果。例如:
R> data[!is.na(data$A), ]
date A B
1 2014-01-01 2 3
2 2014-01-02 5 NA
4 2014-01-04 7 11
R> data[!is.na(data$B), ]
date A B
1 2014-01-01 2 3
4 2014-01-04 7 11
is.na()
返回 TRUE
对于 NA
的每个元素和 FALSE
除此以外。为了索引数据框的行,我们可以使用这个逻辑向量,但我们想要它的相反。因此我们使用 !
暗示相反( TRUE
变成 FALSE
,反之亦然)。您可以通过为
,
后面的列添加索引来限制返回的列。在 [ , ]
,例如R> data[!is.na(data$A), 1:2]
date A
1 2014-01-01 2
2 2014-01-02 5
4 2014-01-04 7
关于r - 如何仅删除一列中的 NA 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977972/