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

如何使用group_by()和summarize()统计数据点出现次数并解决计数错误

错误原因

你对dplyr的count()函数的使用场景理解错误:

  • count()本质是对输入数据框做分组+计数的封装函数,返回的是带分组键和频次列的新数据框,不是可用于summarize()的单值聚合函数
  • 当前代码里按x分组后调用count(x)返回正确结果纯属巧合:每个x分组内所有行的x值唯一,count(x)返回的恰好是当前分组的行数,刚好等于该x值的出现次数;但count(y)、count(z)统计的是当前x分组内y、z列的频次表,只会返回第一个匹配值的计数,完全不符合你的统计需求,因此出现了D未被统计、z列出现不存在的A的计数这类逻辑错误。
解决方案

根据你提到的「统计数据集各列不同因子的出现次数」的需求,分两种常见场景给出实现代码:

场景1:不分组,统计全表三列所有因子的总出现次数

library(tidyverse)
p <- data.frame(x = c("A", "B", "C", "A", "B"), 
                y = c("A", "B", "D", "A", "B"), 
                z = c("B", "C", "B", "D", "E"))

# 转换为长表后统一统计所有因子频次
p %>% 
  pivot_longer(everything(), names_to = "所属列", values_to = "因子值") %>% 
  count(所属列, 因子值, name = "出现次数")

运行后会输出所有列所有因子的完整统计结果,不会遗漏D、E等特殊值。

场景2:保留按x分组的逻辑,统计每个x分组下y、z列各因子的出现次数

p %>% 
  group_by(x) %>% 
  summarise(
    y列统计 = list(enframe(table(y), name = "y因子值", value = "出现次数")),
    z列统计 = list(enframe(table(z), name = "z因子值", value = "出现次数"))
  ) %>% 
  unnest(y列统计) %>% 
  unnest(z列统计)

运行后会输出每个x分组下,y、z列所有因子的对应计数,不会出现统计错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:03