:
:
testScooter[, startCharge := intervals[testScooter, on = .(id, time = start), roll = Inf, x.charge]
][, endCharge := intervals[testScooter, on = .(id, time = end), roll = -Inf, x.charge]][]
:
start end id startCharge endCharge
1: 2018-01-18 23:19:13 2018-01-18 23:26:31 1 83 81
2: 2018-01-19 00:29:22 2018-01-19 00:37:53 1 81 79
3: 2018-01-18 01:22:02 2018-01-18 01:29:21 2 84 80
4: 2018-01-18 01:37:52 2018-01-18 02:06:53 2 80 80
:
roll = Inf intervals startroll = -Inf intervals end
. , .
:
testScooter[intervals, on = .(id, start = time), roll = -Inf, startCharge := i.charge
][intervals, on = .(id, end = time), roll = Inf, endCharge := i.charge][]
:
@Frank , Github, data.table i, , . . , verbose = TRUE:
> testScooter[intervals, on = .(id, start = time), roll = -Inf, startCharge := i.charge, verbose = TRUE][]
Calculated ad hoc index in 0 secs
Starting bmerge ...done in 0 secs
Detected that j uses these columns: startCharge,i.charge
Assigning to 16 row subset of 4 rows
start end id startCharge
1: 2018-01-18 22:19:13 2018-01-18 22:26:31 1 83
2: 2018-01-18 23:29:22 2018-01-18 23:37:53 1 81
3: 2018-01-18 00:22:02 2018-01-18 00:29:21 2 84
4: 2018-01-18 00:37:52 2018-01-18 01:06:53 2 80
- , . . ( @Frank):
> data.table(a = 1:2)[data.table(a = c(2L, 2L), v = 3:4), on=.(a), v := i.v, verbose = TRUE][]
Calculated ad hoc index in 0 secs
Starting bmerge ...done in 0 secs
Detected that j uses these columns: v,i.v
Assigning to 2 row subset of 2 rows
a v
1: 1 NA
2: 2 4
- .
:
testScooter <- structure(list(start = structure(c(1516313953, 1516318162, 1516234922, 1516235872), tzone = "UTC", class = c("POSIXct", "POSIXt")),
end = structure(c(1516314391, 1516318673, 1516235361, 1516237613), tzone = "UTC", class = c("POSIXct", "POSIXt")),
id = c(1L, 1L, 2L, 2L)),
.Names = c("start", "end", "id"), row.names = c(NA, -4L), class = "data.frame")
setDT(testScooter)
intervals <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
time = structure(c(1516311067, 1516311667, 1516312267, 1516312867, 1516313467, 1516314067, 1516314667, 1516315268, 1516315868, 1516316468, 1516317068, 1516317671, 1516318267, 1516318869, 1516319467, 1516233666, 1516234266, 1516234866, 1516235465, 1516236066, 1516236666, 1516237266, 1516237865, 1516238465, 1516239065), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
available = c("yes", "yes", "yes", "yes", "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "no", "no", "no", "yes", "yes", "yes"),
charge = c(83L, 83L, 83L, 83L, 83L, 83L, 81L, 81L, 81L, 81L, 81L, 81L, 81L, 79L, 79L, 84L, 84L, 84L, 80L, 80L, 80L, 80L, 80L, 80L, 80L)),
.Names = c("id", "time", "available", "charge"), row.names = c(NA, -25L), class = "data.frame")
setDT(intervals)