如何在R中将离散频率表合并为更少区间的汇总表
在R中实现基于units数量均衡的区间汇总及自定义区间合并
一、实现各区间units数量大致相等的汇总表
核心思路是基于units的累积和,用分位数切割分组,确保每组的units总和接近。以下是具体步骤(需加载dplyr包):
- 计算
units的累积和并以此划分区间:
library(dplyr) # 示例数据 table <- data.frame(number = c(1:10), units = c(800, 780,500, 430, 200, 189, 110, 86, 54, 31)) # 按累积和分位数分组(示例分3组,可调整length.out数值改变分组数) summary_table <- table %>% mutate(cum_units = cumsum(units)) %>% mutate(group = cut(cum_units, breaks = quantile(cum_units, probs = seq(0, 1, length.out = 4)), include.lowest = TRUE)) %>% group_by(group) %>% summarise( number区间 = paste(min(number), max(number), sep = "-"), 总units数量 = sum(units) ) print(summary_table)
运行后会得到每组的number区间和对应的units总和,各组units数量大致均衡。调整length.out的数值即可修改分组数量。
二、自定义区间合并
如果需要手动指定number的区间,可直接用cut()函数定义范围再汇总:
方法1:基础R实现
# 自定义区间(示例:1-3、4-6、7-10) table$custom_interval <- cut(table$number, breaks = c(0, 3, 6, 10), labels = c("1-3", "4-6", "7-10"), include.lowest = TRUE) # 汇总自定义区间的units总和 custom_summary <- aggregate(units ~ custom_interval, data = table, sum) print(custom_summary)
方法2:dplyr实现
custom_summary <- table %>% mutate(custom_interval = cut(number, breaks = c(0, 3, 6, 10), labels = c("1-3", "4-6", "7-10"), include.lowest = TRUE)) %>% group_by(custom_interval) %>% summarise(总units数量 = sum(units)) print(custom_summary)
可根据需求修改breaks和labels参数,自定义任意区间范围。
内容的提问来源于stack exchange,提问作者Monelisa
相关产品推荐
相关产品推荐

