在进行滚动连接时,我在理解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
rollends
正在做什么的更好/不同的解释。哦,我目前正在使用开发版1.9.7
答案 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-31
和2014-02-01
之间落在之间。 rollends
对此行没有影响,因为它不会落在任何一端。所以最后一个值会前滚。
所有其他值都超出sales2
。所以rollends
论证开始发挥作用。并且rollends[2] = FALSE]
意味着现行价值不会向前滚动。