如何基于第一个时间戳选择每个ID的最大行?

3
我有一个数据框,其中包含具有时间戳的记录。 以下是玩具示例,其中包含一个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类型记录。
我已经尝试使用duplicated,也考虑按ID将日期列降序排序,并添加一个新列,如果当前ID等于上一个ID,则在第一个ID实例旁边放置1,否则放置0。如果记录数量急剧增加,我认为这可能会变得很重。
有没有人知道更优雅的方法 - 或许可以使用data.table。
感谢您的时间。
1个回答

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]

1
感谢 @akrun 的帮助。 - John Smith
@JohnSmith 很高兴知道它有所帮助。在 data.table 中使用 .I 会更快一些。为了测试目的,至少发布6-10行总是很好的。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接