如何在lapply中结合group_by%>%sum实现数据分组求和?
实现方法
首先构造示例数据框:
df = data.frame(x = c(rep(1,5),rep(2,5)), y = 1:10, z = 11:20)
借助dplyr包,结合group_by分组与lapply遍历列计算总和,代码如下:
library(dplyr) library(tidyr) # 按x分组,对y、z列用lapply计算分组总和 summary_df <- df %>% group_by(x) %>% summarise( lapply(select(., y, z), sum), .groups = "drop" ) %>% unnest_wider(col = lapply(select(., y, z), sum)) # 输出结果 summary_df
运行后得到的结果:
x y z 1 1 15 65 2 2 40 90
如果不想额外依赖tidyr,也可以用dplyr的across函数配合lapply逻辑实现,写法更简洁:
summary_df <- df %>% group_by(x) %>% summarise(across(c(y, z), ~sum(.x)), .groups = "drop")
这个写法本质是用across遍历指定列,内部通过~sum(.x)调用求和,和lapply的遍历逻辑一致,同样能得到目标结果。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

