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

如何使用group_by%>%sum对dataframe部分列进行分组求和?

问题与解决方案

问题

我有如下示例数据框df:

df = data.frame(x = c(rep(1,5),rep(2,5)),
                y = 1:10,
                z = 11:20,
                n = 21:30)

希望按x列分组对y和z列求和,同时保留n列的原始值,期望输出如下:

x  y  z  n
1  1 15 65 21
2  1 15 65 22
3  1 15 65 23
4  1 15 65 24
5  1 15 65 25
6  2 40 90 26
7  2 40 90 27
8  2 40 90 28
9  2 40 90 29
10 2 40 90 30

解决方案

方法1:使用dplyr包(简洁易读)

先加载dplyr包,通过分组后修改列值实现需求:

library(dplyr)

df_result <- df %>%
  group_by(x) %>%
  mutate(y = sum(y), z = sum(z)) %>%
  ungroup()

print(df_result)

方法2:使用Base R(无需额外包)

利用ave()函数按分组计算求和,返回与原列长度一致的结果:

df_result <- df
df_result$y <- ave(df_result$y, df_result$x, FUN = sum)
df_result$z <- ave(df_result$z, df_result$x, FUN = sum)

print(df_result)

两种方法都能得到预期输出,dplyr写法更直观,Base R则不需要安装额外包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24