我的数据格式如下:
RouteId, StopOrder, StopType 101, 1, Load 101, 2, Unload 102, 1, Load 102, 2, Load 102, 3, Unload 102, 4, Unload 103, 1, Load 103, 2, Unload 103, 3, Load 103, 4, Unload
鉴于此数据,我想识别卸载停止后具有加载停止的路由ID。
Expected Output: 103
答案 0 :(得分:1)
我们可以尝试data.table
。将'data.frame'转换为'data.table'(setDT(df2)
,按逻辑向量的运行长度类型ID的'RouteId',if
any
进行分组({ {1}}大于2,我们得到Data.table的子集(StopType=='Load')
)。这将为行设置'RouteId'103。
.SD
如果我们只需要'RouteId',只需通过逻辑向量的子集提取它。
library(data.table)
setDT(df2)[,if(any(rleid(StopType=='Load') >2)) .SD ,.(RouteId)]
# RouteId StopOrder StopType
#1: 103 1 Load
#2: 103 2 Unload
#3: 103 3 Load
#4: 103 4 Unload
或setDT(df2)[, .GRP[any(rleid(StopType=='Load') >2)] ,
.(RouteId)]$RouteId
#[1] 103
选项
base R
答案 1 :(得分:0)
这是一个可能的dplyr
解决方案。这取决于您希望RouteId
值作为输出的评论。
library(dplyr)
# assuming your data is loaded into "df"
(df %>%
arrange(RouteId, StopOrder) %>%
group_by(RouteId) %>%
filter(StopType == 'Unload' & lead(StopType) == 'Load') %>%
ungroup)$RouteId