2017-05-08 55 views
0

我有一個數據幀,我只想過濾對應於最早的日期時間的行。以下是我的數據框:使用最早的日期時間切片行

library(lubridate) 
df<-data.frame(ID=rep(1:2,5:6),DATETIME_OF_PROCEDURE=rep(c(ymd_hms("2013-03-16 03:00:42"), 
                  ymd_hms("2013-02-12 08:00:42"), 
                  ymd_hms("2014-06-19 01:00:42"), 
                  ymd_hms("2014-01-22 01:00:42"), 
                  ymd_hms("2014-06-12 02:00:40")), 
                 c(3,2,2,2,2))) 

我想獲得:

#  > df 
# ID DATETIME_OF_PROCEDURE 
# 1 1 2013-02-12 16:00:42 
# 2 1 2013-02-12 16:00:42 
# 3 2 2014-01-22 09:00:42 
# 4 2 2014-01-22 09:00:42 

我嘗試以下,但它提供了一個空的數據幀。

df %>% 
    arrange(DATETIME_OF_PROCEDURE) %>% 
    group_by(ID) %>% 
    slice(min(DATETIME_OF_PROCEDURE)) 

我也試過slice(first(DATETIME_OF_PROCEDURE))但它再次,它不會工作。

+0

正確的語法將是'DF%>%安排(DATETIME_OF_PROCEDURE)%>%GROUP_BY(ID)%>%切片(1L)'但'切片「不會捕獲關係。 – Sotos

回答

1
df %>% 
    group_by(ID) %>% 
    filter(DATETIME_OF_PROCEDURE == min(DATETIME_OF_PROCEDURE)) 
2

既然你已經arrangeslice(1)正常工作:

df %>% 
    arrange(DATETIME_OF_PROCEDURE) %>% 
    group_by(ID) %>% 
    slice(1) 

其他使用which.min,因爲filter需要指數:

df %>% 
    group_by(ID) %>% 
    slice(which.min(DATETIME_OF_PROCEDURE)) 

小心你的數據關係。如果要保留所有關係,請使用filter

兩者返回相同的:

Source: local data frame [2 x 2] 
Groups: ID [2] 

    ID DATETIME_OF_PROCEDURE 
    <int>    <dttm> 
1  1 2013-02-12 09:00:42 
2  2 2014-01-22 02:00:42 
相關問題