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

R语言按ID分组求和物种列 保留同组固定列无需手动指定列名

解决方案

方案1:tidyverse(dplyr)实现(推荐,代码更易读)

利用dplyr的列选择器可以批量匹配所有sp开头的列,同时因为同一ID的temp值完全一致,直接将temp加入分组变量即可保留原始值,不需要额外处理:

library(dplyr)

result <- df %>%
  # 按ID和temp分组,同一ID的temp值一致,不影响分组逻辑
  group_by(ID, temp) %>%
  # 对所有sp开头的列执行求和
  summarise(across(starts_with("sp"), sum), .groups = "drop")

运行后得到的结果和预期完全一致:

# A tibble: 2 × 5
  ID     temp   sp1   sp2   sp3
  <chr> <dbl> <dbl> <dbl> <dbl>
1 a      36.5    25     7     4
2 b      32      35    11     6

如果还有其他和temp一样、同一ID取值完全一致的变量需要保留,直接加进group_by的参数里即可。


方案2:base R 实现

用正则表达式批量匹配所有sp开头的列,同样将temp加入分组条件:

# 批量匹配所有sp开头的列名
sp_cols <- grep("^sp", names(df), value = TRUE)
# 按ID+temp分组,对所有sp列求和
result <- aggregate(. ~ ID + temp, df[, c("ID", "temp", sp_cols)], sum)

运行结果:

ID temp sp1 sp2 sp3
1  a 36.5  25   7   4
2  b 32.0  35  11   6

方案说明

两种方案都不需要手动逐个指定sp列名,哪怕有上千个sp开头的物种列都可以自动识别处理:

  • 利用前缀匹配规则批量选中需要求和的物种列
  • 不需要求和、同一ID取值唯一的变量直接加入分组条件,即可保留原始值,不会被聚合计算
  • 自动过滤A这类无意义的非目标列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:03