如何在R中按规则分组列并聚合对应数值?(偏好tidyverse方案)
使用tidyverse实现需求
可以通过dplyr的函数组合完成,步骤如下:
- 先加载tidyverse包:
library(tidyverse)
- 对数据框进行处理:
df <- data.frame(age = c("40-45", "40-45", "40-45", "40-45"), age.cat = c("35-40", "40-45", "35-40", "40-45"), x = c(21, 170, 36, 96), y = c(47, 110, 121, 394), desc = c("eating", "eating", "running", "running")) result <- df %>% # 替换age.cat与age不匹配的值为age mutate(age.cat = if_else(age.cat != age, age, age.cat)) %>% # 按age、处理后的age.cat、desc分组 group_by(age, age.cat, desc) %>% # 对x、y列求和,同时取消分组状态 summarise(x = sum(x), y = sum(y), .groups = "drop") print(result)
执行后会得到你想要的结果:
# A tibble: 2 × 5 age age.cat x y desc <chr> <chr> <dbl> <dbl> <chr> 1 40-45 40-45 191 157 eating 2 40-45 40-45 132 515 running
步骤说明
mutate函数:通过if_else条件判断,将所有age.cat与age不匹配的行,把age.cat替换为age的值,匹配的行保留原age.cat。group_by函数:指定age、处理后的age.cat、desc作为分组依据,确保同一分组内的行可以合并求和。summarise函数:对分组后的x和y列分别求和,.groups = "drop"参数用于将分组后的结果转换为普通数据框,避免后续操作受分组状态影响。
内容的提问来源于stack exchange,提问作者aerw4
相关产品推荐
相关产品推荐

