R语言:如何按Name分组对Score区间的Frequency求和并重构DataFrame?
R语言分组汇总并重分类Score的简便方法
你的需求可以通过两种简便方式实现,分别基于tidyverse工具链和基础R函数,具体如下:
方法一:使用dplyr包(推荐,代码逻辑清晰)
dplyr是tidyverse生态中用于数据处理的核心包,代码可读性强,适合初学者理解:
# 首次使用需先安装包,后续可注释该行 # install.packages("dplyr") library(dplyr) # 处理数据 result <- dat %>% # 创建分类列,将Score映射为对应类别 mutate(Score_Category = case_when( Score == 1 ~ "High", Score %in% 2:3 ~ "Medium", Score %in% 4:5 ~ "Low" )) %>% # 按Name和新分类列分组 group_by(Name, Score_Category) %>% # 对每组的Frequency求和 summarise(Total_Frequency = sum(Frequency), .groups = "drop")
运行后得到的result即为目标DataFrame,其中.groups = "drop"用于取消分组状态,避免后续操作受分组影响。
方法二:使用基础R函数(无需额外安装包)
如果不想安装第三方包,可以用基础R的cut和aggregate函数完成:
# 用cut函数将Score划分为指定区间并命名 dat$Score_Category <- cut( dat$Score, breaks = c(0, 1, 3, 5), # 划分区间:0-1、1-3、3-5 labels = c("High", "Medium", "Low"), # 对应区间的类别名称 include.lowest = TRUE # 确保Score=1被包含在第一个区间 ) # 按Name和分类列分组,对Frequency求和 result_base <- aggregate(Frequency ~ Name + Score_Category, data = dat, sum)
两种方法最终得到的结果一致,示例输出如下:
Name Score_Category Frequency 1 A High 9 2 B High 3 3 C High 20 4 A Medium 21 5 B Medium 17 6 C Medium 6 7 A Low 10 8 B Low 10 9 C Low 4
内容的提问来源于stack exchange,提问作者maplesyrup123
相关产品推荐
相关产品推荐

