如何在R中对age列按指定范围分组并求y列对应和?
按指定年龄范围分组并对y列求和(tidyverse方案)
原始数据
df <- data.frame(age = c("37", "41", "42", "44", "47"), y = c(4.0, 30.0, 6.0, 6.0, 30.0))
数据预览:
age y 37 4.0 41 30.0 42 6.0 44 6.0 47 30.0
期望输出
age y 37 4.0 40-45 42.0 45-50 30.0
tidyverse解决方案
加载tidyverse包后,按以下步骤处理:
- 将字符型
age转为数值型,方便范围判断; - 用
case_when自定义分组规则,单独处理37的情况,其余按指定范围划分; - 按新分组列聚合,对
y求和; - 调整列名和输出顺序,匹配期望格式。
完整代码:
library(tidyverse) df_result <- df %>% mutate(age_num = as.numeric(age)) %>% mutate(age_group = case_when( age_num == 37 ~ "37", age_num >= 40 & age_num < 45 ~ "40-45", age_num >= 45 & age_num <= 50 ~ "45-50" )) %>% group_by(age_group) %>% summarise(y = sum(y)) %>% rename(age = age_group) %>% arrange(match(age, c("37", "40-45", "45-50"))) # 查看结果 print(df_result, row.names = FALSE)
运行输出:
age y 37 4.0 40-45 42.0 45-50 30.0
代码说明
as.numeric(age):转换年龄类型,实现数值范围比较;case_when:灵活定义分组逻辑,精准匹配需求中的特殊分组;group_by()+summarise():完成分组求和的核心操作;arrange():强制分组顺序与期望一致,避免默认字母排序干扰。
内容的提问来源于stack exchange,提问作者aerw4
相关产品推荐
相关产品推荐

