按R中的列分组

时间:2016-02-08 17:55:23

标签: r

我的数据格式如下:

 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

2 个答案:

答案 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