仅保留数据框中每个ID的最新日期

Ben*_* S. 9 r date

我在R中有一个数据框,其中行代表事件,一列是事件的日期.事件发生的事情由ID列描述.因此,对于每个ID,有多个条目.

如何过滤数据框,以便仅保留每个ID的最新事件?ID是整数,日期在表单中mm/dd/yyyy.

akr*_*run 13

你可以试试

library(dplyr)
df %>% 
  group_by(ID) %>%
  slice(which.max(as.Date(date, '%m/%d/%Y')))
Run Code Online (Sandbox Code Playgroud)

数据

df <- data.frame(ID= rep(1:3, each=3), date=c('02/20/1989',
'03/14/2001', '02/25/1990',  '04/20/2002', '02/04/2005', '02/01/2008',
'08/22/2011','08/20/2009', '08/25/2010' ), stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)


Fra*_*ank 7

对于任何解决方案,您最好先校正日期变量,如@akrun所示:

df$date <- as.Date(df$date, '%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)

基地R.

df[
  tapply(1:nrow(df),df$ID,function(ii) ii[which.max(df$date[ii])])
,]
Run Code Online (Sandbox Code Playgroud)

这使用选择的行号来对数据进行子集化.您可以通过自己运行中间线(在[]s 之间)来查看选择.

Data.table

与@ rawr相似:

require(data.table)
DT <- data.table(df)

unique(DT[order(date)], by="ID", fromLast=TRUE)
# or
unique(DT[order(-date)], by="ID")
Run Code Online (Sandbox Code Playgroud)