通过查找特定列中的NA条目来检索数据帧的子集

4
假设我们有一个包含NA值的数据框,如下所示,
>data
A  B  C  D
1  3  NA 4
2  1  3  4
NA 3  3  5
4  2  NA NA
2  NA 4  3
1  1  1  2

我希望了解一般的方法,用于检索在CA中具有NA值的data子集。因此,输出应该是:

A  B  C  D
1  3  NA 4
NA 3  3  5
4  2  NA NA

我尝试使用子集命令,像这样:subset(data, A==NA | C==NA),但没有起作用。有什么想法吗?

比较 A==NA 总是返回 FALSE。这是有意的。 - smci
2个回答

12

在这种情况下非常实用的函数是complete.cases。它逐行检查NA,如果有任何一个返回FALSE。如果没有NA,则返回TRUE。

因此,您需要对数据进行子集化,只选择两列,然后使用complete.cases(.)negate,并从原始数据中重新获取这些行,如下所示:

# assuming your data is in 'df'
df[!complete.cases(df[, c("A", "C")]), ]
#    A B  C  D
# 1  1 3 NA  4
# 3 NA 3  3  5
# 4  4 2 NA NA

9
这里有一个可能性:
# Read your data
data <- read.table(text="
A  B  C  D
1  3  NA 4
2  1  3  4
NA 3  3  5
4  2  NA NA
2  NA 4  3
1  1  1  2",header=T,sep="")

# Now subset your data 
subset(data, is.na(C) | is.na(A))
   A B  C  D
1  1 3 NA  4
3 NA 3  3  5
4  4 2 NA NA

这正是我正在寻找的!而且它易于记忆,易于阅读。谢谢! - Christian Bueno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接