r - 选择其他df中不存在的行
问题描述
我有一个带有旅行 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 * 我会得到所有未保存的行,这也是错误的。
解决方案
您可以使用除此之外的其他库sqldf
吗?我认为以下内容可以完成您正在寻找的使用dplyr
:
library(dplyr)
dat %>%
group_by(trip_id, stop_id) %>%
filter(speed == 0 | sum(speed == 0) == 0) %>%
summarize(min_time = min(timestamp),
max_time = if_else(sum(speed == 0) == 0,
NA_real_,
max(timestamp)))
# A tibble: 3 x 4
# Groups: trip_id [?]
trip_id stop_id min_time max_time
<int> <int> <dbl> <dbl>
1 1 1 2 3
2 1 2 101 NA
3 1 3 202 202
数据
dat <- structure(list(trip_id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
stop_id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L),
speed = c(5L, 0L, 0L, 5L, 2L, 2L, 2L, 2L, 4L, 0L),
timestamp = c(1L, 2L, 3L, 4L, 101L, 102L, 103L, 104L, 201L, 202L)),
.Names = c("trip_id", "stop_id", "speed", "timestamp"),
row.names = c(NA, -10L),
class = "data.frame")
推荐阅读
- c# - 生成不同的随机数并返回给main方法
- sql - 在 SQL Server 中存储大量行的最优化方法是什么?
- reactjs - 如何从 Django Rest API 在 React 中显示图像?
- python - AttributeError:模块“模块”没有属性“主”
- c# - C# Entity Framework Core 单向关系
- r - R 中的限制性 AppArmor 配置文件
- sas - 如何在 SAS 中使用此数据执行卡方检验?
- amazon-web-services - 如何在 Lerna / Yarn Workspaces 项目中使用 AWS CDK 仅部署 IaC 代码?
- java - 始终从 GPS 位置获得相同的速度 - Kotlin
- machine-learning - 将 YOLO 结果映射到 2D 计划