滚动数据表

时间:2017-04-15 12:03:33

标签: r join merge data.table

我正在尝试使用uid和timestamp映射两个数据集。 一个是添加到购物车数据,另一个是最终交易数据,我可以基于滚动参数和data.table加入这两个。但是由于我的数据集的性质,我错过了一些比赛。如果可以提供任何方向,那将是很好的。

这是我的尝试: 我正在提供用户ID的示例数据,以便我可以告诉您我错过的位置 这是add_to cart_data:

structure(list(uid = c("1000017637676410451", "1000017637676410451", 
"1000017637676410451"), dt = structure(c(1490150844, 1490151029, 
1490151435), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    price = c(14.99, 4.06, 2.12), name = c("NEW MUSYSIC LAVALIER MICROPHONE WITH CLIP AND WINDSCREEN FOR WIRELESS MIC SYSTEM", 
    "LAVALIER TIE CLIP LAPEL MICROPHONE MIC FOR SENNHEISER 3.5mm SCREW LOCK PLUG", 
    "NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC"
    )), .Names = c("uid", "dt", "price", "name"), sorted = c("uid", 
"dt"), class = c("data.table", "data.frame"), row.names = c(NA, 
-3L), .internal.selfref = <pointer: 0x0000000006530788>)

以下是最终交易数据:

structure(list(dt = structure(c(1490151670, 1490151671, 1490151671
), tzone = "UTC", class = c("POSIXct", "POSIXt")), uid = c("1000017637676410451", 
"1000017637676410451", "1000017637676410451")), .Names = c("dt", 
"uid"), sorted = c("uid", "dt"), class = c("data.table", "data.frame"
), row.names = c(NA, -3L), .internal.selfref = <pointer: 0x0000000006530788>)

这是我尝试使用roll=+Inf的data.table选项,其中我尝试将最近的购物车添加到最终交易中,确保购物车添加时间戳在交易完成时间戳之前。

    setkey(final_sub,uid,dt)
    setkey(cart_sub,uid,dt)

    test_infpos <- cart_sub[final_sub,roll=+Inf]
    test_infpos_sub

这是我得到的输出:

                  uid                  dt price                                                                           name
1: 1000017637676410451 2017-03-22 03:01:10  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC
2: 1000017637676410451 2017-03-22 03:01:11  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC
3: 1000017637676410451 2017-03-22 03:01:11  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC

所以正在发生的事情是最后一次购物车添加归因于所有转换实际上正确看roll=+Inf做什么,但是你可以看到所有添加到购物车的交易都非常接近每个时间戳。它们和最终交易也有非常接近的时间戳,如果这样的连接可以包括或将它们全部包含在一个中,那么基本上所有3个购物车值都可以分配给所有3个最终交易。 这只是一个数据样本,所以理想情况下,如果有一种方法可以使用roll参数到最近的uid,dt组合,并且还要考虑是否有时间戳非常接近,可以应用滚动窗口所有这些都只在nearest roll

之上

这就是我希望这些案例的输出看起来像:

                  uid                  dt price                                                                           name
1: 1000017637676410451 2017-03-22 03:01:10  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC, LAVALIER TIE CLIP LAPEL MICROPHONE MIC FOR SENNHEISER 3.5mm SCREW LOCK PLUG,NEW MUSYSIC LAVALIER MICROPHONE WITH CLIP AND WINDSCREEN FOR WIRELESS MIC SYSTEM
2: 1000017637676410451 2017-03-22 03:01:11  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC, LAVALIER TIE CLIP LAPEL MICROPHONE MIC FOR SENNHEISER 3.5mm SCREW LOCK PLUG,NEW MUSYSIC LAVALIER MICROPHONE WITH CLIP AND WINDSCREEN FOR WIRELESS MIC SYSTEM
3: 1000017637676410451 2017-03-22 03:01:11  2.12 NEW Pro Lavalier Lapel Microphone For Wireless Microphone system Mono 3.5mm PC, LAVALIER TIE CLIP LAPEL MICROPHONE MIC FOR SENNHEISER 3.5mm SCREW LOCK PLUG,NEW MUSYSIC LAVALIER MICROPHONE WITH CLIP AND WINDSCREEN FOR WIRELESS MIC SYSTEM

任何方向都非常有用

0 个答案:

没有答案