You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速统计R数据框各列的非NA值数量?

高效统计数据框各列非NA值数量的方法

你现在手动逐个列计算非NA值的方式确实太繁琐了,尤其是数据集列数多的时候完全不高效。这里有几个更简洁的R语言方法,能快速帮你搞定所有列的非NA值统计:

方法一:一行代码直接计算(最简洁)

这是效率最高的方式,一行代码就能输出所有列的非NA值数量,还自动带上列名:

colSums(!is.na(df))

简单解释下逻辑:is.na(df)会生成和原数据框结构一致的布尔矩阵,!把矩阵反转(NA转为FALSE,非NA转为TRUE),最后colSums()对每列求和,得到的就是每列的非NA值总数。

方法二:附带更多统计信息的快速查看

如果你除了非NA数量,还想了解每列的其他统计特征(比如数值列的均值、中位数,因子列的频数),可以直接用R内置的summary()函数:

summary(df)

输出结果里,每列的NA's行显示缺失值数量,用总观测数减去这个数就是非NA值数;部分列还会直接标注有效观测的数量,信息更全面。

方法三:自定义输出格式(完全匹配你的需求)

如果你想要严格贴合你给出的输出样式,可以用循环或者工具包实现:

基础循环写法

for (col_name in colnames(df)) {
  non_na_count <- sum(!is.na(df[[col_name]]))
  cat(paste0(col_name, " Amount of Non-Na-Values: ", non_na_count, "\n"))
}

这个循环会遍历所有列名,计算对应列的非NA值数量,再按照你想要的格式打印出来。

用purrr包的简洁写法(需先安装加载包)

library(purrr)
imap(df, ~paste0(.y, " Amount of Non-Na-Values: ", sum(!is.na(.x)))) %>% 
  walk(cat, "\n")

imap()会同时传递列的数值(.x)和列名(.y),生成目标格式的字符串后,walk()负责打印输出。

最后提个小建议:尽量避免使用attach(df)这种方式,很容易造成命名冲突,直接用df[[col_name]]或者df$col_name的方式访问列数据会更安全可靠。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:03:31