id=c(2,3, 3, 4, 4, 4, 5, 6, 7, 8, 8)
DateofCall=as.Date(c("2013-03-22", "2013-05-25", "2013-02-17", "2013-02-19", "2013-02- 21", "2013-04-22", "2013-06-22", "2013-03-28", "2013-08-22", "2013-03-18", "2012-12-28" ) )
mydata <- data.frame(id, DateofCall)
我想要一个新的数据框,其中只保留具有最新日期的重复ID的观察结果,如下所示:
id=c(2,3, 4, 5, 6, 7, 8)
DateofCall=as.Date(c("2013-03-22", "2013-05-25", "2013-04-22", "2013-06-22", "2013-03- 28", "2013-08-22", "2013-03-18") )
newdata <- data.frame(id, DateofCall)
我尝试使用此功能,但收到错误消息:test=mydata[!((duplicated(mydata$id) & max(mydata$DateofCall)) ), ]
日期变量是否有max()
替代?
有什么见解?
答案 0 :(得分:5)
aggregate(DateofCall ~ id, mydata, max)
会做到这一点。
# id DateofCall
# 1 2 2013-03-22
# 2 3 2013-05-25
# 3 4 2013-04-22
# 4 5 2013-06-22
# 5 6 2013-03-28
# 6 7 2013-08-22
# 7 8 2013-03-18
更新
此版本保留了任意数量的其他列:
subset(mydata, ave(DateofCall, id, FUN = max) == DateofCall)