如何组合并选择R中的最低值

时间:2015-12-09 12:31:33

标签: r

假设以下数据

OriginId, OriginName, DestinationId, DestinationName,Time
1        ,   Origin 1,   1       ,          Destination 1 , 20
1        ,   Origin 1,   2       ,          Destination 2 , 25
2        ,   Origin 2,   3       ,          Destination 3 , 14
2        ,   Origin 2,   4       ,          Destination 4 , 29

这是一张CSV,用于保存始发地和目的地之间的旅行时间。我想找到每个来源最近的目的地。换句话说,我必须按OriginId对数据进行分组,并根据时间给每个组赋予排名,并获得排名为1的行。因此,上述数据的预期结果为:

OriginId, OriginName, DestinationId, DestinationName,Time(Minute)
1        ,   Origin 1,   1       ,          Destination 1 , 20
2        ,   Origin 2,   3       ,          Destination 3 , 14

分组后我需要使用哪个R功能?

1 个答案:

答案 0 :(得分:3)

使用dplyr,可以按'OriginId'进行分组,然后获取具有which.min最小'时间'的'时间'行索引,并使用slice提取该行。

library(dplyr)
df1 %>%
  group_by(OriginId) %>%
  slice(which.min(Time))

或者,如果我们考虑使用data.table,请将'data.frame'转换为'data.table'(setDT(df1)),按'OriginId'分组,我们得到行索引(如在前一种情况下)并对数据集的行(.SD)进行子集化。

library(data.table)
setDT(df1)[, .SD[which.min(Time)], by = OriginId]