data.table混淆使用rollends参数滚动连接

时间:2016-06-06 20:32:53

标签: r data.table

在进行滚动连接时,我在理解data.table rollends参数时遇到了一些麻烦。

供参考的文件:

  

逻辑向量长度2(单个逻辑被回收)指示   值是在第一个值之前还是在最后一个值之后   对于一个组也应该滚动。

     
      
  • 如果rollends [2] = TRUE,它会   滚动最后一个值。对于LOCF,默认为TRUE,对于   NOCB卷。

  •   
  • 如果rollends [1] = TRUE,它将滚动第一个值   向后。对于NOCB,默认为TRUE,对于LOCF卷,则为FALSE。

  •   

现在是一个令人困惑的例子。在这里,我建立了一个商业广告表和两个不同的销售表。

# commercials
commercials<-data.table(commercialID=c("C1","C2","C3","C4"), commercialDate=as.Date(c("2014-1-1","2014-4-1","2014-7-1","2014-9-15")))
commercials[, rollDate:=commercialDate] #Add a column, rollDate equal to commercialDate
setkey(commercials, "rollDate")

commercials
   commercialID commercialDate   rollDate
1:           C1     2014-01-01 2014-01-01
2:           C2     2014-04-01 2014-04-01
3:           C3     2014-07-01 2014-07-01
4:           C4     2014-09-15 2014-09-15


# sales1 (A single sale before all commercials)
sales1 <- data.table(saleID=c("S0"), saleDate=as.Date(c("2010-12-31")))
sales1[, rollDate:=saleDate]
setkey(sales1, "rollDate")

sales1
saleID   saleDate   rollDate
1:     S0 2010-12-31 2010-12-31


# sales2 (A sale before all commercials and a sale after commercial1)
sales2 <- data.table(saleID=c("S0", "S1"), saleDate=as.Date(c("2010-12-31", "2014-2-1")))
sales2[, rollDate:=saleDate]
setkey(sales2, "rollDate")

sales2
saleID   saleDate   rollDate
1:     S0 2010-12-31 2010-12-31
2:     S1 2014-02-01 2014-02-01

现在进行一些滚动连接

sales1[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
   saleID saleDate   rollDate commercialID commercialDate
1:     NA     <NA> 2014-01-01           C1     2014-01-01
2:     NA     <NA> 2014-04-01           C2     2014-04-01
3:     NA     <NA> 2014-07-01           C3     2014-07-01
4:     NA     <NA> 2014-09-15           C4     2014-09-15

sales2[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
   saleID   saleDate   rollDate commercialID commercialDate
1:     S0 2010-12-31 2014-01-01           C1     2014-01-01
2:     NA       <NA> 2014-04-01           C2     2014-04-01
3:     NA       <NA> 2014-07-01           C3     2014-07-01
4:     NA       <NA> 2014-09-15           C4     2014-09-15

问题

  1. 为什么销售S0会在第二次加入时映射到C1而不是第一次加入?
  2. rollends正在做什么的更好/不同的解释。
  3. 哦,我目前正在使用开发版1.9.7

1 个答案:

答案 0 :(得分:2)

在第一种情况下,

sales1[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
2014-01-01中的

commercials行在 2010-12-31之后落入。现行价值必须继续推进。但它也属于 end ,即在sales1之后,你提供了rollends[2] = FALSE。所以它没有得到推进。

在第二种情况下,

sales2[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
2014-01-01中的{p> commercials行在
2010-12-312014-02-01之间落在之间。 rollends对此行没有影响,因为它不会落在任何一端。所以最后一个值会前滚。

所有其他值都超出sales2。所以rollends论证开始发挥作用。并且rollends[2] = FALSE]意味着现行价值不会向前滚动。