R的SQL分析函数的模拟



是否有类似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

相关内容

  • 没有找到相关文章

最新更新