我有一个数据框,其中包含带有时间戳的记录。 下面的玩具示例包含基于两个不同时间戳附加了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
感谢您的时间
答案 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]