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

R语言自动生成频率表:优化手动统计代码

解决方案

方法1:使用基础R的table()函数(最简单高效)

这是生成交叉频率表最直接的方式,一行代码就能搞定,完全无需手动拆分合并数据框:

# 构造示例数据
df <- data.frame(
  Type = c("A", "B", "A", "C", "B", "C", "A"),
  District = c(1, 1, 2, 1, 1, 2, 2)
)

# 生成交叉频率表
freq_table <- table(df$Type, df$District)
# 转为数据框格式(按需选择)
as.data.frame.matrix(freq_table)

输出结果:

12
A12
B20
C11

方法2:使用sapply实现自动化

如果需要用sapply实现,可通过遍历所有District,自动统计各Type的出现次数,适配任意数量的分类:

# 获取唯一的Type和District
unique_types <- unique(df$Type)
unique_districts <- unique(df$District)

# 用sapply嵌套遍历统计频率
freq_table_sapply <- sapply(unique_districts, function(d) {
  sapply(unique_types, function(t) {
    sum(df$Type == t & df$District == d)
  })
})

# 设置行列名
rownames(freq_table_sapply) <- unique_types
colnames(freq_table_sapply) <- unique_districts

# 转为数据框
as.data.frame(freq_table_sapply)

方法3:使用tidyverse的pivot_wider(适合数据框工作流)

若习惯tidyverse工具链,可先统计分组频率再转宽表,可读性高:

library(tidyverse)

df %>%
  count(Type, District) %>%
  pivot_wider(names_from = District, values_from = n, values_fill = 0)

关键提示

  • table()默认自动补全0值,且处理大数据时效率最优;
  • 三种方案均无需手动适配Type/District的数量,9种Type、31个District的场景下直接复用即可;
  • table()返回的对象可直接用于后续统计分析(如卡方检验)。

内容的提问来源于stack exchange,提问作者Léo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:25:15