如何仅计算 R 中的非空列,同时包含具有稀疏 NA 的列?
How do I count only non-empty columns in R, while included columns with sparse NA?
我有一个这样的矩阵:
A B C D
1 4 5 NA
43 3 NA NA
85 NA 43 NA
4 2 NA NA
我想知道如何计算非空列的数量(在本例中为 3)。但是,如果我这样做 ncol(df)
我得到 4。我怎样才能只计算不完全为空的列(最好使用 base R 或 Tidyverse(尽量不要使用太多导入的包)?
我们可以用is.na
构建一个逻辑矩阵,得到colSums
,转换为一个逻辑矩阵。向量 (> 0
) 并得到 sum
sum(colSums(!is.na(m1)) > 0)
[1] 3
或者也可以在 data.frame
上使用 Filter
并获得 ncol
ncol(Filter(function(x) any(!is.na(x)), as.data.frame(m1)))
[1] 3
数据
m1 <- structure(c(1L, 43L, 85L, 4L, 4L, 3L, NA, 2L, 5L, NA, 43L, NA,
NA, NA, NA, NA), .Dim = c(4L, 4L), .Dimnames = list(NULL, c("A",
"B", "C", "D")))
我们可以使用 sum
和 sapply
sum(sapply(df, function(y) sum(length(which(is.na(y))))>0))
输出:
[1] 3
我有一个这样的矩阵:
A B C D
1 4 5 NA
43 3 NA NA
85 NA 43 NA
4 2 NA NA
我想知道如何计算非空列的数量(在本例中为 3)。但是,如果我这样做 ncol(df)
我得到 4。我怎样才能只计算不完全为空的列(最好使用 base R 或 Tidyverse(尽量不要使用太多导入的包)?
我们可以用is.na
构建一个逻辑矩阵,得到colSums
,转换为一个逻辑矩阵。向量 (> 0
) 并得到 sum
sum(colSums(!is.na(m1)) > 0)
[1] 3
或者也可以在 data.frame
上使用 Filter
并获得 ncol
ncol(Filter(function(x) any(!is.na(x)), as.data.frame(m1)))
[1] 3
数据
m1 <- structure(c(1L, 43L, 85L, 4L, 4L, 3L, NA, 2L, 5L, NA, 43L, NA,
NA, NA, NA, NA), .Dim = c(4L, 4L), .Dimnames = list(NULL, c("A",
"B", "C", "D")))
我们可以使用 sum
和 sapply
sum(sapply(df, function(y) sum(length(which(is.na(y))))>0))
输出:
[1] 3