gpt4 book ai didi

r - 如何按条件滚动总和?

转载 作者:行者123 更新时间:2023-12-02 02:48:36 24 4
gpt4 key购买 nike

我有一个数据表如下:

我必须做一个前滚总和,我用下面的方法做

id <- c(rep(1,9))
date <- c('2018-01-01 15:00:33', '2018-01-01 15:05:31', '2018-01-01 15:10:12','2018-01-01 15:15:33', '2018-01-01 15:20:48', '2018-01-01 15:25:41','2018-01-01 15:30:27', '2018-01-01 15:35:18', '2018-01-01 16:40:08')
value=c(12,36,30,15,18,39,21,24,27)
dt=data.table(id,date,value)
dt[,rolled_sum_value:=Reduce(`+`,shift(value,0:5,type="lead")),by="id"]

现在我有一个限制,滚动窗口应该是 30 分钟,所以在这种情况下,在第四行而不是 144 我需要它是 117 (15+18+39+21+24) 而不是从第九行开始的 144大于 30 分钟窗口 2018-01-01 16:40:08

感谢任何帮助。

最佳答案

你可以做一个非等连接:

# use a datetime class so time differences make sense
dt[, date := as.POSIXct(date)]

dt[, v :=
dt[.(id = id, d_dn = date, d_up = date + 30*60), on=.(id, date >= d_dn, date <= d_up),
sum(value), by=.EACHI]$V1
]

id date value v
1: 1 2018-01-01 15:00:33 12 171
2: 1 2018-01-01 15:05:31 36 183
3: 1 2018-01-01 15:10:12 30 147
4: 1 2018-01-01 15:15:33 15 117
5: 1 2018-01-01 15:20:48 18 102
6: 1 2018-01-01 15:25:41 39 84
7: 1 2018-01-01 15:30:27 21 45
8: 1 2018-01-01 15:35:18 24 24
9: 1 2018-01-01 16:40:08 27 27

关于r - 如何按条件滚动总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149843/

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