2017-12-06 5 views
-2

私はdata.tableの初心者です。誰でも私になぜshift()と期待される結果を得ることができないのか説明できますか?ここで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 

(私は "リード" または "遅れ" と同じ結果を得る)私は期待していた結果である:

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 

答えて

6

shiftための関数定義は

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

ですしかし、あなたが使用している引数を指定していないので、この関数は、第3引数がfill引数(定義の3番目の引数)に使用されているものとみなします。

それでは、あなたが実際にやっていることはおそらく、明示的に引数を述べるたい

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

です:

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 
関連する問題