使用带有R中约束的data.table滚动连接

时间:2018-04-28 16:17:55

标签: r data.table

我正在尝试使用滚动连接来连接两个数据表。我查看了各种答案,包括here,但遗憾的是无法找到一个在这种情况下有帮助的答案。我从发布的链接中借用了相同的例子。

我的第一个数据集是两个用户1和2的websession数据:

user  web_date_time
1   29-Oct-2016 6:10:03 PM
1   29-Oct-2016 7:34:17 PM
1   30-Oct-2016 2:08:03 PM
1   30-Oct-2016 3:55:12 PM
2   31-Oct-2016 11:32:12 AM
2   31-Oct-2016 2:59:56 PM
2   01-Nov-2016 12:49:44 PM

我的第二张时间戳是购买:

user  purchase_date_time
    1   29-Oct-2016 6:10:00 PM
    1   29-Oct-2016 6:11:00 PM
    2   31-Oct-2016 11:35:12 AM
    2   31-Oct-2016 2:50:00 PM

我想要的输出是哪个网络会话导致购买但有约束。约束是 - websession应该在上一次购买之后。所需的输出如下(要求所有购买,要创建的附加列“websession_led_purchase”):

user  purchase_date_time          websession_led_purchase
    1   29-Oct-2016 6:10:00 PM    NA
    1   29-Oct-2016 6:11:00 PM    29-Oct-2016 6:10:03 PM
    2   31-Oct-2016 11:35:12 AM   31-Oct-2016 11:32:12 AM
    2   31-Oct-2016 2:50:00 PM    NA

第一个NA是因为在购买之前没有websession,第二个NA是由于在上一次购买之后(以及购买之前)没有websession导致第二次购买用户2。

我尝试使用dt2 [dt1,roll = Inf]的滚动连接方法,然而,我得到了所需输出中第四行的“2016年10月31日上午11:32:12”,这是不正确的。

让我知道你的建议。

1 个答案:

答案 0 :(得分:0)

rolling联接的行为符合预期。

该文件建议:

  

+ Inf(或TRUE)滚动x向前的主导值。它也被称为最后一次观察(LOCF)。

这意味着最后一次观察可以结转并加入许多记录。第4行正好相同,其中2016-10-31 11:32:12被处理并映射到下一条记录(2016-10-31 14:50:00)。

解决此问题的一种简单方法是将lag的{​​{1}}值与当前行匹配,如果这两个值相同,则将当前行中的值设置为websession_led_purchase。这将确保数据仅前进一次。

NA