是否有类似SQL分析的方法,可以在不折叠行的情况下进行聚合?例如,我想在没有group BY的情况下为每个组求和,在SQL中我可以这样做:
select group, x, sum(x) over(partition by group) group_sum
from mytable
我希望能够在R:中做一些类似的事情
df <- data.frame(group=c('a', 'a', 'b', 'b'), x=c(1, 3, 10, 30))
df %>% mutate(group_sum = window_aggr(group_by=group, func=sum))
group x group_sum
a 1 4
a 3 4
b 10 10
b 30 40
其中window_aggr只是一个虚构的函数。
那么,有没有一种方法可以在一个管道中实现这一点,而不需要进行实际的聚合和连接?
谢谢!
谨致问候,尼古拉
您可以使用ave
,在这种情况下,它将为组df$group
计算df$x
的sum
。
df$group_sum <- ave(df$x, df$group, FUN=sum)
df
# group x group_sum
#1 a 1 4
#2 a 3 4
#3 b 10 40
#4 b 30 40
或者使用基础管道:
df |> transform(group_sum = ave(x, group, FUN=sum))
# group x group_sum
#1 a 1 4
#2 a 3 4
#3 b 10 40
#4 b 30 40
或者使用dplyr
library(dplyr)
df %>% mutate(group_sum = ave(x, group, FUN=sum))
# group x group_sum
#1 a 1 4
#2 a 3 4
#3 b 10 40
#4 b 30 40