我正在尝试使用滚动连接来连接两个数据表。我查看了各种答案,包括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”,这是不正确的。
让我知道你的建议。
答案 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