查找包含超过 5 个 NA 值的列的索引
Find the index of columns containing more than 5 NA values
我想对数据框进行子集化,并仅提取包含 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)
来做到这一点,但都无济于事..
我们可以在逻辑矩阵 (is.na(df1)
) 上使用 colSums
,使用 which
获取索引并提取 names
names(which(colSums(is.na(df1)) >= 5))
#[1] "E"
将 ColSums
与 is.na
结合使用
names(df)[colSums(is.na(df))>5]
[1] "E"
which(unlist(lapply(df, function(x) sum(is.na(x)) > 5)))
4
我想对数据框进行子集化,并仅提取包含 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)
来做到这一点,但都无济于事..
我们可以在逻辑矩阵 (is.na(df1)
) 上使用 colSums
,使用 which
获取索引并提取 names
names(which(colSums(is.na(df1)) >= 5))
#[1] "E"
将 ColSums
与 is.na
names(df)[colSums(is.na(df))>5]
[1] "E"
which(unlist(lapply(df, function(x) sum(is.na(x)) > 5)))
4