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

按分组计算分类变量的各类别频数

嘿,我来帮你搞定这个分组统计分类变量各水平频数的需求!下面分R和Python两种常用数据分析工具给你具体实现方法,你可以根据自己的使用场景来选~

在R中实现分组计算分类变量频数

方法一:用dplyr(推荐,灵活易读)

假设你的数据集叫df,分组变量是group_var,分类变量是fact(水平为fact1、fact2、fact3)。

  1. 先加载dplyr和tidyr包(如果没装的话先跑install.packages(c("dplyr", "tidyr"))):
library(dplyr)
library(tidyr)
  1. 执行分组统计并转成宽格式:
result_df <- df %>%
  # 按分组变量和分类变量一起分组
  group_by(group_var, fact) %>%
  # 计算每组的频数
  summarise(count = n(), .groups = "drop") %>%
  # 把长格式转成宽格式,缺失的水平用0填充
  pivot_wider(names_from = fact, values_from = count, values_fill = 0)

这样得到的result_df就是每个分组下fact1、fact2、fact3各自的频数,没有出现的水平会显示0,完全符合你的需求。

方法二:用基础R的table函数(快速简洁)

如果不需要转成数据框格式,只是想看交叉频数表,直接用:

table(df$group_var, df$fact)

这个会生成一个矩阵,行是分组,列是fact的三个水平,值就是对应频数,非常直观。

在Python中实现分组计算分类变量频数

方法一:用pandas的crosstab函数(最便捷)

假设你的数据集是df,分组变量group_var,分类变量fact。先导入pandas:

import pandas as pd

然后一行代码搞定:

result_df = pd.crosstab(df['group_var'], df['fact'])

crosstab会自动统计每个分组下各分类水平的频数,缺失的水平默认补0,直接得到你想要的宽格式结果。

方法二:用groupby结合value_counts

如果你需要更灵活的中间处理,可以用这个方式:

result_df = df.groupby('group_var')['fact'].value_counts().unstack(fill_value=0)

解释一下:groupby('group_var')['fact'].value_counts()先按分组统计每个fact水平的出现次数,unstack把索引转成列,fill_value=0确保没有的水平显示0,最终结果和crosstab一致。

不管用哪种方法,都能完美实现“按分组计算分类变量各水平频数”的需求,要是你的分组变量或者分类变量名称不一样,直接替换代码里的group_var和fact就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:04:00