2015-12-09 27 views
0

最低值假设以下数据如何GROUP和选择中的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功能我是否需要在群组之后使用?

回答

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] 
+2

谢谢,那会是可能有点细节添加到您的答案吗? – Shahin

+1

@shaahin对不起,我的浏览器上出现了一些javascript问题,导致我无法使用描述进行更新。现在,它已更新。 – akrun