如何使用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
相关产品推荐
相关产品推荐

