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

如何在R中按规则分组列并聚合对应数值?(偏好tidyverse方案)

使用tidyverse实现需求

可以通过dplyr的函数组合完成,步骤如下:

  1. 先加载tidyverse包:
library(tidyverse)
  1. 对数据框进行处理:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:26:09