这是我对此的解释。
你从一个data.frame
看起来像这样的开始。(我已经添加了一个额外的乱序值,data.frame
所以我的答案会与你的不同)。
mydf <- data.frame(ID = c("ID1", "ID1", "ID2", "ID2", "ID3", "ID3"),
Date = c("Mar 01", "Mar 02", "Mar 03", "Mar 04", "Mar 05", "Mar 04"))
mydf
# ID Date
# 1 ID1 Mar 01
# 2 ID1 Mar 02
# 3 ID2 Mar 03
# 4 ID2 Mar 04
# 5 ID3 Mar 05
# 6 ID3 Mar 04
首先,从“日期”列中创建实际的“日期”对象。我假设您的日期格式是“星期一”,所以我"%b %d"
在strptime
. 由于没有年份,因此假定为当前年份。
Date2 <- strptime(mydf$Date, format="%b %d") ## ASSUMES THE CURRENT YEAR
Date2
# [1] "2013-03-01" "2013-03-02" "2013-03-03" "2013-03-04" "2013-03-05" "2013-03-04"
接下来,找到一个函数,让我们按您的“ID”变量对这些日期进行排序。在基础 R 中,ave
这样做非常方便。
ave(as.numeric(Date2), mydf$ID, FUN = order)
# [1] 1 2 1 2 2 1
使用这些值对具有每个 ID 的第一个(最低)值(即结果等于“1”)的行进行子集化。
mydf[ave(as.numeric(Date2), mydf$ID, FUN = order) == 1, ]
# ID Date
# 1 ID1 Mar 01
# 3 ID2 Mar 03
# 6 ID3 Mar 04