【发布时间】:2019-07-08 15:48:41
【问题描述】:
我有一个带有行程 ID、停靠点 ID、时间戳和速度的 df。
trip_id stop_id speed timestamp
1 1 1 5 1
2 1 1 0 2
3 1 1 0 3
4 1 1 5 4
5 1 2 2 101
6 1 2 2 102
7 1 2 2 103
8 1 2 2 104
9 1 3 4 201
10 1 3 0 202
我已经为trip_id和stop_id相同的组保存了速度为零的第一行和最后一行。
df_departure_z <- sqldf("SELECT trip_id, stop_id, MAX(timestamp) FROM df WHERE speed = 0 GROUP BY trip_id,stop_id")
df_arrival_z <- sqldf("SELECT trip_id, stop_id, MIN(timestamp) FROM df WHERE speed = 0 GROUP BY trip_id,stop_id")
结果如下:
df_departure_z:
trip_id stop_id MAX(timestamp)
1 1 1 3
2 1 3 203
df_arrival_z:
trip_id stop_id MIN(timestamp)
1 1 1 2
2 1 3 202
我的问题:有一个停止(停止 2)的速度从不为零,因此我想找到一种方法来为速度从不为零的停止保存一个时间戳。我试过这个:
df_arr_dep <- sqldf("SELECT trip_id, stop_id, MIN(timestamp) FROM df GROUP BY trip_id, stop_id EXCEPT SELECT trip_id, stop_id FROM df_arrival_z ")
但它给了我一个错误,因为我试图根据另一个 df 中两列中的值保存三列。基本上,我想再次搜索我的 df 并找到那些不在 df_departure_z 或 df_arrival_z 中的 trip_id 和 stop_id 组合。如果我尝试使用 SELECT * 我会得到所有未保存的行,这也是错误的。
【问题讨论】:
-
尝试使用来自
dplyr的anti_join -
df_departure_z正确吗?我只看到trip_id2 和stop_id3 的一个 0 速度条目,timestamp为 202。
标签: r sqldf not-exists