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