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

时间:2013-07-12 20:08:41

标签: r subset

假设我们有一个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

我希望了解在dataNA中使用C值检索A子集的一般方法。所以输出应该是,

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

我尝试使用子命令,如subset(data, A==NA | C==NA),但它不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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