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

如何在R语言中实现分组条件求和并合并年龄≤20的行

在R中实现分组条件求和并合并年龄组

可以使用dplyr包完成这个需求,步骤如下:

代码实现

# 加载dplyr包
library(dplyr)

# 处理数据
processed_df <- original_df %>%
  # 按指定维度分组
  group_by(year, month, kind, gender, type) %>%
  # 将age≤20的行统一标记为age=20
  mutate(age = ifelse(age <= 20, 20, age)) %>%
  # 在原有分组基础上,加入处理后的age作为新分组依据
  group_by(year, month, kind, gender, type, age, .add = TRUE) %>%
  # 对每组的breeding_count求和,最后取消分组结构
  summarise(breeding_count = sum(breeding_count), .groups = "drop")

代码解释

  • group_by(year, month, kind, gender, type):先按需求的五个维度分组,确保每个组内的操作独立进行。
  • mutate(age = ifelse(age <= 20, 20, age)):将每个分组内年龄≤20的行,统一替换为年龄20。
  • group_by(..., .add = TRUE):保留原有分组维度,新增处理后的age作为分组依据,确保后续求和是针对同组同年龄(含合并后的20岁组)的行。
  • summarise(breeding_count = sum(breeding_count), .groups = "drop"):对每个子组的breeding_count求和,最后取消分组得到整洁的结果数据框。

示例验证

针对你提供的输入数据:

original_df <- tibble::tribble(
  ~year, ~month, ~kind, ~gender, ~age, ~breeding_count, ~type,
  "2022", 12, "한우", "암", 3, 65043, "breeding",
  "2022", 12, "한우", "암", 4, 31740, "breeding",
  "2022", 12, "한우", "암", 5, 36680, "breeding",
  "2022", 12, "한우", "암", 6, 42295, "breeding",
  "2022", 12, "한우", "암", 7, 49243, "breeding",
  "2022", 12, "한우", "암", 8, 58414, "breeding"
)

运行代码后得到的结果:

# A tibble: 1 × 7
  year  month kind  gender   age breeding_count type    
  <chr> <dbl> <chr> <chr>  <dbl>          <dbl> <chr>   
1 2022     12 한우  암         20         283415 breeding

结果中age=20对应的breeding_count是原数据中age3到8的数值总和(65043+31740+36680+42295+49243+58414=283415),完全符合需求。

内容的提问来源于stack exchange,提问作者seungwoolee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:46