R:数据框根据第一个时间戳选择每个ID的最大行

R: dataframe Selecting the maximum row per ID based on first timestamp

我有一个数据框,其中包含带有时间戳的记录。 下面的玩具示例包含一个 ID,该 ID 附加了 2 个基于两个不同时间戳的 SMS。实际上会有数千个 ID,每个 ID 都有近 80-100 种短信类型和日期

toydf <- data.frame(ID = c(1045937900, 1045937900), 
                    SMS.Type = c("DF1", "WCB14"), 
                    SMS.Date = c("12/02/2015 19:51", "13/02/2015 08:38"))

我希望能够创建一个新的数据框,它只包含第一个 SMS.Date 甚至最后一个

的 SMS 类型的记录

我看过使用 duplicated,我还考虑过按 ID 降序对日期列进行排序,并添加一个新列,在 ID 的第一个实例旁边放置一个 1 和如果当前 ID 等于前一个 ID,则为零。我怀疑如果记录数量急剧增加,这会变得很沉重

有谁知道更优雅的方法 - 也许使用 data.table

感谢您的宝贵时间

尝试

library(dplyr)
toydf %>% 
   group_by(ID) %>%
   arrange(desc(as.POSIXct(SMS.Date, format='%d/%m/%Y %H:%M'))) %>% 
   slice(1L)

或使用data.table

library(data.table)
toydf$SMS.Date <- as.POSIXct(toydf$SMS.Date, format='%d/%m/%Y %H:%M')
setkey(setDT(toydf), ID, SMS.Date)[, .SD[.N], ID]