SQL R 解析函数的模拟

Analog of SQL analytic functions for R

是否有一种类似于 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$xsum
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