假设我们有一个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
我希望了解在data
或NA
中使用C
值检索A
子集的一般方法。所以输出应该是,
A B C D
1 3 NA 4
NA 3 3 5
4 2 NA NA
我尝试使用子命令,如subset(data, A==NA | C==NA)
,但它不起作用。有什么想法吗?
答案 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