data.table shift()似乎没有正确"领先"

Eri*_*ric -2 r data.table

我是data.table的初学者.任何人都可以向我解释为什么我不能得到预期的结果shift()?(我得到的结果是"领先"或"滞后")

set.seed(123)
x <- data.table(a = sample(1:10,10,replace = F))
x <- x[order(a)][, a1 := shift(a,1,"lead")]
x
     a a1
 1:  1 NA
 2:  2  1
 3:  3  2
 4:  4  3
 5:  5  4
 6:  6  5
 7:  7  6
 8:  8  7
 9:  9  8
10: 10  9
Run Code Online (Sandbox Code Playgroud)

这是我期待的结果:

data.table(a = 1:10, a1 = c(2:10,NA))
     a a1
 1:  1  2
 2:  2  3
 3:  3  4
 4:  4  5
 5:  5  6
 6:  6  7
 7:  7  8
 8:  8  9
 9:  9 10
10: 10 NA
Run Code Online (Sandbox Code Playgroud)

Sym*_*xAU 6

函数定义shift

shift(x, n=1L, fill=NA, type=c("lag", "lead"), give.names=FALSE)
Run Code Online (Sandbox Code Playgroud)

但是,由于您尚未指定正在使用的参数,因此该函数假定您的第三个fill参数用于参数(定义中的第三个参数).

所以你真正在做的是

shift(x = a, n = 1, fill = "lead", type = "lag", give.names = FALSE) 
## where type & give.names are using their default values
Run Code Online (Sandbox Code Playgroud)

您可能希望显式声明参数:

set.seed(123)
library(data.table)
x <- data.table(a = sample(1:10,10,replace = F))


x[order(a)][, a1 := shift(a, n = 1, type = "lead")][]
#      a a1
# 1:  1  2
# 2:  2  3
# 3:  3  4
# 4:  4  5
# 5:  5  6
# 6:  6  7
# 7:  7  8
# 8:  8  9
# 9:  9 10
# 10: 10 NA
Run Code Online (Sandbox Code Playgroud)