如何统计两列变量的组合频次?附R语言示例数据
统计数据框两列变量组合频次的解决方案
这里提供几种在R中统计两列变量所有组合频次的实用方法,结果可直接用于绘制柱状图或饼图:
方法1:基础R的table()函数
这是最简便的原生方法,直接生成交叉频次表:
# 生成交叉频次表 freq_table <- table(dat$a, dat$b) # 查看完整频次表 print(freq_table) # 提取特定组合(x & yes)的数量 freq_table["x", "yes"] # 输出结果为5
输出的交叉表中,行对应a列的取值,列对应b列的取值,单元格数值就是对应组合的出现次数。
方法2:dplyr包生成结构化数据框
如果需要长格式的数据框(更适配ggplot绘图),可以用dplyr的分组计数:
library(dplyr) # 分组统计频次 freq_df <- dat %>% group_by(a, b) %>% summarise(count = n(), .groups = "drop") # 查看结果 print(freq_df) # 提取x&yes组合的数量 freq_df %>% filter(a == "x", b == "yes") %>% pull(count)
得到的freq_df包含三列:a、b和对应组合的count,直接可以作为绘图数据。
方法3:data.table包适配大数据场景
如果你的数据量很大,data.table的分组计数效率更高:
library(data.table) # 转换为data.table格式 setDT(dat) # 分组统计频次 freq_dt <- dat[, .(count = .N), by = .(a, b)] # 查看结果 print(freq_dt)
快速绘图示例
以dplyr生成的freq_df为例,绘制柱状图:
library(ggplot2) ggplot(freq_df, aes(x = paste(a, b, sep = "-"), y = count)) + geom_col(fill = "#2E86AB") + labs(x = "变量组合", y = "频次", title = "两列变量组合频次分布")
内容的提问来源于stack exchange,提问作者Dnjl_01
相关产品推荐
相关产品推荐

