查找包含5个以上NA值的列的索引

时间:2018-06-07 13:58:38

标签: r dataframe subset na

我希望对数据框进行子集化,并仅提取包含5个或更多NA值的列。

data.frame(A = rep(1, 10), B = c(rep(2,5), rep(3,5)), D = rep(5, 10), E = c(rep(1,2), rep(NA,6), rep(6,2)), F = c(rep(NA,2), rep(2,8)))

   A B D  E  F
1  1 2 5  1 NA
2  1 2 5  1 NA
3  1 2 5 NA  2
4  1 2 5 NA  2
5  1 2 5 NA  2
6  1 3 5 NA  2
7  1 3 5 NA  2
8  1 3 5 NA  2
9  1 3 5  6  2
10 1 3 5  6  2

所以在这个例子中,我希望得到列“E”的索引。

我的原始数据集大约有3000列,因此速度或多或少都很重要。

我一直试图用sum(is.na)filter_if(any_vars)来做这件事,但都无济于事。

3 个答案:

答案 0 :(得分:3)

ColSumsis.na

一起使用
names(df)[colSums(is.na(df))>5]
[1] "E"

答案 1 :(得分:2)

我们可以在逻辑矩阵(colSums)上使用is.na(df1),使用which获取索引并提取names

names(which(colSums(is.na(df1)) >= 5))
#[1] "E"

答案 2 :(得分:2)

which(unlist(lapply(df, function(x) sum(is.na(x)) > 5)))
4