我如何根据车牌号和时间离开2个不同的表?

jas*_*son 2 r

我是R的新手,并试图根据车牌号和日期时间将2组数据连接起来。

数据集1

LicensePlate DateTime
XLP1234P     09-JUN-18 02.52.40.144000000 PM
XLP2345P     18-JUL-18 11.22.46.855000000 AM
XLP3456P     18-JUL-18 11.22.46.856000000 AM
XLP4567P     18-JUL-18 11.22.46.856000000 AM
XLP5678P     18-JUL-18 11.22.46.857000000 AM
XLP6789P     18-JUL-18 11.22.46.858000000 AM
Run Code Online (Sandbox Code Playgroud)

数据集2

LicensePlate DateTime
XLP1234P     09-JUN-18 02.55.40.144000000 PM 
XLP2345P     18-JUL-18 11.30.46.855000000 AM
Run Code Online (Sandbox Code Playgroud)

基本上,数据集是由2套不同的设备记录的,因此会略有时间差。我想在可接受的10分钟时差基础上加入车牌的第一组。

left_join 可以按列值合并数据,但是如何设置条件以使datetime在合适的范围内?

chi*_*n12 5

这是使用包的一种可能的非方法。如果OP仅在寻找方法,我将对此

DT1[, c("start", "end") := .(DateTime - 60*10, DateTime + 60*10)]
DT2[DT1, on=.(LicensePlate=LicensePlate, DateTime>=start, DateTime<=end),
    .(LicensePlate, i.DateTime, x.DateTime)]
Run Code Online (Sandbox Code Playgroud)

输出:

   LicensePlate          i.DateTime          x.DateTime
1:     XLP1234P 2018-06-09 02:52:40 2018-06-09 02:55:40
2:     XLP2345P 2018-07-18 11:22:46 2018-07-18 11:30:46
3:     XLP3456P 2018-07-18 11:22:46                <NA>
4:     XLP4567P 2018-07-18 11:22:46                <NA>
5:     XLP5678P 2018-07-18 11:22:46                <NA>
6:     XLP6789P 2018-07-18 11:22:46                <NA>
Run Code Online (Sandbox Code Playgroud)

数据:

library(data.table)
DT1 <- fread("LicensePlate,DateTime 
XLP1234P,09-JUN-18 02.52.40.144000000 PM 
XLP2345P,18-JUL-18 11.22.46.855000000 AM 
XLP3456P,18-JUL-18 11.22.46.856000000 AM 
XLP4567P,18-JUL-18 11.22.46.856000000 AM 
XLP5678P,18-JUL-18 11.22.46.857000000 AM 
XLP6789P,18-JUL-18 11.22.46.858000000 AM")

DT2 <- fread("LicensePlate,DateTime
XLP1234P,09-JUN-18 02.55.40.144000000 PM 
XLP2345P,18-JUL-18 11.30.46.855000000 AM")

DT1[, DateTime := as.POSIXct(DateTime, format="%d-%b-%y %H.%M.%OS")]
DT2[, DateTime := as.POSIXct(DateTime, format="%d-%b-%y %H.%M.%OS")]
Run Code Online (Sandbox Code Playgroud)