如何在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
相关产品推荐
相关产品推荐

