gpt4 book ai didi

dplyr 中的滚动总和

转载 作者:行者123 更新时间:2023-12-04 11:22:59 32 4
gpt4 key购买 nike

set.seed(123)

df <- data.frame(x = sample(1:10, 20, replace = T), id = rep(1:2, each = 10))

每个 id ,我想创建一个列,它的总和为前 5 x值。
df %>% group_by(id) %>% mutate(roll.sum = c(x[1:4], zoo::rollapply(x, 5, sum)))
# Groups: id [2]
x id roll.sum
<int> <int> <int>
3 1 3
8 1 8
5 1 5
9 1 9
10 1 10
1 1 36
6 1 39
9 1 40
6 1 41
5 1 37
10 2 10
5 2 5
7 2 7
6 2 6
2 2 2
9 2 39
3 2 32
1 2 28
4 2 25
10 2 29

第 6 行应该是 35 (3 + 8 + 5 + 9 + 10) ,第 7 行应该是 33 (8 + 5 + 9 + 10 + 1)等等。

但是,上述函数也包括用于计算的行本身。我该如何解决?

最佳答案

 library(zoo)
df %>% group_by(id) %>%
mutate(Sum_prev = rollapply(x, list(-(1:5)), sum, fill=NA, align = "right", partial=F))

#you can use rollapply(x, list((1:5)), sum, fill=NA, align = "left", partial=F)
#to sum the next 5 elements scaping the current one


x id Sum_prev
1 3 1 NA
2 8 1 NA
3 5 1 NA
4 9 1 NA
5 10 1 NA
6 1 1 35
7 6 1 33
8 9 1 31
9 6 1 35
10 5 1 32
11 10 2 NA
12 5 2 NA
13 7 2 NA
14 6 2 NA
15 2 2 NA
16 9 2 30
17 3 2 29
18 1 2 27
19 4 2 21
20 10 2 19

关于dplyr 中的滚动总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403704/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com