gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:30:44 26 4
gpt4 key购买 nike

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

引用文档:

A logical vector length 2 (a single logical is recycled) indicating whether values falling before the first value or after the last value for a group should be rolled as well.

  • If rollends[2]=TRUE, it will roll the last value forward. TRUE by default for LOCF and FALSE for NOCB rolls.

  • If rollends[1]=TRUE, it will roll the first value backward. TRUE by default for NOCB and FALSE for LOCF rolls.



现在是一个令人困惑的例子。在这里,我建立了一个广告表和两个不同的销售表。
# 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

问题
  • 为什么销售 S0 在第二个连接中映射到 C1 而不是第一个?
  • 更好/不同的解释 rollends是在做。

  • 哦,我目前使用的是开发版,1.9.7

    最佳答案

    在第一种情况下,

    sales1[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
    2014-01-01排在 commercials跌后 2010-12-31 .必须结转现行值(value)。但它也落在最后,即在 sales1 之后,并且您提供了 rollends[2] = FALSE .所以它不会向前滚动。

    在第二种情况下,
    sales2[commercials, roll=TRUE, rollends=c(TRUE, FALSE)]
    2014-01-01排在 commercials介于两者之间 2010-12-312014-02-01 . rollends没有影响对于这一行,因为它不落在任何一端。所以最后一个值会向前滚动。

    所有其他值都在 sales2 之外.所以 rollends争论开始发挥作用。和 rollends[2] = FALSE]意味着现行值不会前滚。

    关于r - 使用 rollends 滚动连接参数的 data.table 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666402/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com