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

按组统计观测数及多列零值/NA值的高效实现方法

高效实现分组统计总观测数与多列零值/NA数量

不用拆分数据框再合并,直接在summarise里一次性搞定所有统计需求:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarise(
    # 每组总观测数
    total_obs = n(),
    # 统计指定列的零值数量,按需修改列列表
    across(c(mpg, disp, hp), ~sum(.x == 0, na.rm = TRUE), .names = "{col}_zero_count"),
    # 统计指定列的NA值数量
    across(c(mpg, disp, hp), ~sum(is.na(.x)), .names = "{col}_na_count")
  )

关键说明

  • n():这是dplyr分组统计总数的标准操作,直接返回每组的真实总观测数,不会像你原代码那样出现非零值的错误。
  • across():替代旧版的summarise_each,可以批量处理多列,.names参数能自动生成清晰的列名,比如mpg_zero_count、mpg_na_count。
  • 如果要统计所有数值列,把c(mpg, disp, hp)换成where(is.numeric)就行,不用手动列每一列。
  • 统计零值时的na.rm = TRUE是为了忽略NA,避免NA影响统计结果;如果想把NA也算作零值,删掉这个参数即可。

原代码问题点

你原代码里的summarise_each(funs(sum(0)))完全不对,会输出全0的列;而且用mutate加count再summarise的方式纯属冗余,直接在summarise里用n()就能拿到正确的每组总数。

内容的提问来源于stack exchange,提问作者Agustín Indaco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:21:25