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

如何在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包后,按以下步骤处理:

  1. 将字符型age转为数值型,方便范围判断;
  2. 用case_when自定义分组规则,单独处理37的情况,其余按指定范围划分;
  3. 按新分组列聚合,对y求和;
  4. 调整列名和输出顺序,匹配期望格式。

完整代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:00:02