R语言如何统计非全空列数量?含稀疏NA的列需纳入统计
解决方案
Base R 实现
核心逻辑为逐列判断是否所有值均为NA,再统计非全NA列的数量:
# 方法1:用colSums实现,运行效率更高 sum(colSums(!is.na(df)) > 0) # 方法2:用apply逐列判断,可读性更强 sum(!apply(df, 2, function(x) all(is.na(x))))
以上两种写法对data.frame和矩阵类型都通用,运行后即可得到结果3。
Tidyverse 实现
使用dplyr的条件筛选语法实现:
library(dplyr) # 写法1 管道流形式 df %>% select(where(~!all(is.na(.x)))) %>% ncol() # 写法2 嵌套形式 ncol(select(df, where(\(x) !all(is.na(x)))))
如果需要保留非全空列的原始数据,去掉末尾的ncol()即可直接得到筛选后的数据集。
测试验证
你提供的示例数据构造代码如下,可直接运行验证结果:
df <- data.frame( A = c(1, 43, 85, 4), B = c(4, 3, NA, 2), C = c(5, NA, 43, NA), D = rep(NA_real_, 4) )
内容的提问来源于stack exchange,提问作者JVDeasyas123
相关产品推荐
相关产品推荐

