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

我想知道一种通用的方法来检索或中dataNA值的子集。所以输出应该是,CA

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

我尝试像这样使用子集命令subset(data, A==NA | C==NA),但它不起作用。有任何想法吗?

4

2 回答 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
于 2013-07-12T20:32:05.727 回答
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
于 2013-07-12T20:20:12.540 回答