【问题标题】:data.table shift() doesn't seem to "lead" correctly [closed]data.table shift() 似乎没有正确“引导”[关闭]
【发布时间】:2017-12-06 01:57:42
【问题描述】:

我是 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

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    shift 的函数定义为

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

    但是,由于您没有指定要使用的参数,因此该函数假定您的第三个参数用于 fill 参数(定义中的第三个参数)。

    所以你实际上在做的是

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      相关资源
      最近更新 更多