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

时间:2015-05-25 12:48:56

标签: r distinct-values

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

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的降序排序日期列,并添加一个新列,它将1放在ID的第一个实例旁边,为零如果当前ID等于先前的ID。我怀疑如果记录数量急剧增加,这将会变得很重

有没有人知道更优雅的方式 - 也许使用data.table

感谢您的时间

1 个答案:

答案 0 :(得分:1)

尝试

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]