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)
函数定义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)