gpt4 book ai didi

r - 使用 data.table 实现滚动窗口

转载 作者:行者123 更新时间:2023-12-04 14:27:42 25 4
gpt4 key购买 nike

我可以通过反复“移动”我的数据,然后“按行”汇总来实现滚动窗口,但这看起来很麻烦,而且不容易推广到不同的窗口大小。

#' Generate dummy data
library(data.table)
set.seed(42)
d <- data.table(id=rep(letters[1:2], each=5), time=rep(1:5,times=2), x=sample.int(10,10,replace=T))

数据如下所示:

id  time    x
a 1 10
a 2 10
a 3 3
a 4 9
a 5 7
b 1 6
b 2 8
b 3 2
b 4 7
b 5 8

现在对过去 2 次(对于每个 ID)进行滚动“最大值”。

#' Now you want to take the maximum of the previous 2 x values (by id)
#' I can do this by creating shifted lagged versions
d[, x.L1 := shift(x,1,type='lag'), by=id]
d[, x.L2 := shift(x,2,type='lag'), by=id]
d[, x.roll.max := max(x,x.L1,x.L2, na.rm=2), by=.(id,time)]

生成这个

id  time    x   x.L1    x.L2    x.roll.max
a 1 10 NA NA 10
a 2 10 10 NA 10
a 3 3 10 10 10
a 4 9 3 10 10
a 5 7 9 3 9
b 1 6 NA NA 6
b 2 8 6 NA 8
b 3 2 8 6 8
b 4 7 2 8 8
b 5 8 7 2 8

我假设有更好的方法。

最佳答案

所以我按照上面@Franks 的建议去了 RcppRoll。

library(Rcpp)
d[, x.roll.max := roll_max(x, n=2L, align='right', fill=NA, na.rm=T), by=id]

而且我想我不应该尝试在 data.table b/c 中完成这一切,这非常有效。

  id    time    x   x.roll.max
a 1 11 NA
a 2 12 12
a 3 4 12
a 4 10 10
a 5 8 10
a 6 7 8
b 1 9 NA
b 2 2 9
b 3 8 8
b 4 9 9
b 5 6 9
b 6 9 9

关于r - 使用 data.table 实现滚动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42126071/

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