2015-12-09 28 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