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

R语言:基于唯一ID对DataFrame多列求和的dplyr实现问题

解决dplyr分组求和的问题

嘿,我来帮你排查下问题~你的代码没成功,主要是因为用了dplyr旧版本的语法,现在新版的dplyr已经弃用了summarise_all()和funs()这两个写法啦,所以运行时要么报错,要么达不到预期效果。

下面给你两种可行的解决方案,优先推荐新版语法:

新版dplyr(1.0.0+)推荐写法

用across()配合summarise(),这是现在dplyr官方推荐的方式,更灵活也更清晰:

方式1:指定要求和的列

如果明确知道要对Val1、Val2、Val3求和,可以直接列出来:

library(dplyr)

df %>% 
  group_by(ID) %>% 
  summarise(across(c(Val1, Val2, Val3), sum))

方式2:对所有非分组列求和

如果你的数据里除了ID列,其他列都需要求和,可以用everything()简化:

df %>% 
  group_by(ID) %>% 
  summarise(across(everything(), sum))

旧版dplyr兼容写法

如果你的dplyr版本比较旧(低于1.0.0),可以调整成下面的写法,去掉funs()的括号:

df %>% 
  group_by(ID) %>% 
  summarise_all(sum)

验证结果

用你提供的示例数据测试:
先构造数据框:

df <- data.frame(
  ID = c("A", "A", "A", "B"),
  Val1 = c(1,1,1,0),
  Val2 = c(1,1,1,0),
  Val3 = c(1,1,1,1)
)

运行上面的代码后,就能得到你想要的结果:

# A tibble: 2 × 4
  ID    Val1 Val2 Val3
  <chr> <dbl> <dbl> <dbl>
1 A         3     3     3
2 B         0     0     1

另外建议你尽量升级到最新版的dplyr,新版的across()支持更多高级操作,比如同时应用多个函数、用列选择器筛选列等,实用性更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:36