如何仅计算 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")))

我们可以使用 sumsapply

sum(sapply(df, function(y) sum(length(which(is.na(y))))>0))

输出:

[1] 3