在 R 中按行选择最近日期

4

我有一个问题,已经简化为以下任务。对于一个包含ID和日期的数据框;

set.seed(123)
myids <- sample(c('a001', 'a002', 'a003'), 12, replace = TRUE)
mydates <- as.Date(sample(c("2007-06-22", "2004-02-13", "2007-05-22", "2001-10-10", "2008-05-05", "2004-02-15"), 12, replace = TRUE))
mydf <- data.frame(myids, mydates)

我需要选择每个主题中最近日期的一行。结果应该是:
a001    5/5/08
a002    5/5/08
a003    2/15/04

有人知道怎么做吗?


4
尝试使用library(dplyr); mydf %>% group_by(myids) %>% summarise(mydates=format(max(mydates), '%m/%d/%y'))进行操作,如果你有多列数据,则可以使用mydf %>% group_by(myids) %>% slice(which.max(mydates))。请注意保持翻译后的内容与原文意思相符,且不添加解释性文字或其他任何额外内容。 - akrun
3
或者 aggregate(mydates~., mydf, max) - Pierre L
6
这不是重复问题。提问者并没有明确要求使用dplyr解决方案,而且还有很多其他(我认为更好的)方法可以解决这个问题。 - jlhoward
1个回答

8
这里提供一个data.table的解决方案。
library(data.table)
setDT(mydf)[,.SD[which.max(mydates)],keyby=myids]
#    myids    mydates
# 1:  a001 2008-05-05
# 2:  a002 2008-05-05
# 3:  a003 2004-02-15

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