我在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)
对于任何解决方案,您最好先校正日期变量,如@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)
| 归档时间: |
|
| 查看次数: |
8267 次 |
| 最近记录: |