我想使用shift
中的data.table
函数来引导/滞后一个新列,但是我想从添加到data.table
的滞后向量中回收值。 。据我所知fill must be a vector of length 1
,因此滞后的值必须填充一个恒定值(即这里的NA
)。
请参阅下面的MWE。
dt1
是按原样使用data.table
函数的结果shift
。新的b
列的值为NA
,其中应为4、5和6。
dt2
是所需的数据表结果。如果我的想法是正确的,则输出需要R
回收规则,但在向量应开始的位置指定了超前/滞后值。
我本可以添加一个新向量(请参见x_to_avoid
,请参见下文),但是我希望避免进行更多的手动工作。
谢谢
library(data.table)
library(magrittr)
# vector to lead/lag when updating datatable
x = c(1:6)
# leaves NA where 4, 5, 6 "should" have gone for my purposes
dt1 <- data.table(a = c(1:10)) %>%
.[, b := shift(x,
n = 3L,
fill = NA,
type = c("lag"))]
dt1
# desired output
dt2 <- dt1[, .(a)] %>%
.[, b := c(4,5,6,1,2,3,4,5,6,1)]
# could use another vector, but my actual use is more complicated and I prefer to avoid this (if possible)
x_to_avoid = c(4,5,6,1:6,1)