我希望创建一个数据表,记录公交站点之间的出发和到达时间。这是我的
这里是它应该工作的方式。思路是车辆按照停靠序列行驶。例如,在旅程
问题在于这是两列之间的逐行迭代过程。直观地说,我会在data.table中使用
可重现数据集:
data.table
的格式。(以下是可复现的数据集) trip_id stop_sequence arrival_time departure_time travel_time
1: a 1 07:00:00 07:00:00 00:00:00
2: a 2 00:00:00 00:00:00 00:02:41
3: a 3 00:00:00 00:00:00 00:01:36
4: a 4 00:00:00 00:00:00 00:02:39
5: a 5 00:00:00 00:00:00 00:02:28
6: b 1 07:00:00 07:00:00 00:00:00
7: b 2 00:00:00 00:00:00 00:00:00
8: b 3 00:00:00 00:00:00 00:01:36
9: b 4 00:00:00 00:00:00 00:00:37
10: b 5 00:00:00 00:00:00 00:03:00
这里是它应该工作的方式。思路是车辆按照停靠序列行驶。例如,在旅程
a
中,车辆从停靠点1
到停靠点2
需要花费00:02:41
的时间。假设每个停靠点乘客上下车的固定时间为40秒,则公交车将在停靠点2
出发,时间为"07:03:21"
。问题在于这是两列之间的逐行迭代过程。直观地说,我会在data.table中使用
for set
loop,但我无法理解这一点。能否帮忙?可重现数据集:
library(data.table)
library(chron)
dt <- structure(list(trip_id = c("a", "a", "a", "a", "a", "b", "b",
"b", "b", "b"), stop_sequence = c(1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L), arrival_time = structure(c(0.291666666666667, 0,
0, 0, 0, 0.291666666666667, 0, 0, 0, 0), format = "h:m:s", class = "times"),
departure_time = structure(c(0.291666666666667, 0, 0, 0,
0, 0.291666666666667, 0, 0, 0, 0), format = "h:m:s", class = "times"),
travel_time = structure(c(0, 0.00186598685444013, 0.00110857958406301,
0.00183749407361369, 0.00171664297781446, 0, 0.000522388450578203,
0.00111473367541453, 0.000427755975518318, 0.00207918951573377
), format = "h:m:s", class = "times")), .Names = c("trip_id",
"stop_sequence", "arrival_time", "departure_time", "travel_time"
), class = c("data.table", "data.frame"), row.names = c(NA, -10L
))
预期输出:前四行
trip_id stop_sequence arrival_time departure_time travel_time
1: a 1 07:00:00 07:00:00 00:00:00
2: a 2 07:02:41 07:03:21 00:02:41
3: a 3 07:04:57 07:05:37 00:01:36
4: a 4 07:08:16 07:08:56 00:02:39
dt[, departure_time := arrival_time[1] + cumsum(travel_time) + (0:(.N-1))*times('00:00:40'), by = trip_id]; dt[, arrival_time := c(arrival_time[1], tail(departure_time, -1) - times('00:00:40')), by = trip_id]
这段代码的作用是为数据表中的每个trip_id计算出发时间(departure_time)和到达时间(arrival_time)。其中,到达时间由第一个到达时间和后续行程的累计旅行时间、等待时间(40秒)以及前面行程的到达时间共同计算得出;而出发时间则由到达时间加上等待时间得到。 - eddi