我是R的新手,我正在尝试汇总结果并查找最小日期。例如,如果我有
ID Date Value
0 2013-06-02 1
0 2013-04-02 3
0 2013-02-02 5
1 2013-08-02 6
1 2013-04-02 7
1 2013-12-02 9
我要找的结果是:
ID Date Value
0 2013-02-02 5
1 2013-04-02 7
任何时候都会受到赞赏。
答案 0 :(得分:3)
以下是data.table
library(data.table)
df$Date <- as.Date(df$Date)
data.table(df)[, .SD[which.min(Date), ], by=ID]
您也可以使用dplyr
(感谢Ananda):
library(dplyr)
df %.% group_by(ID) %.% filter(Date == min(Date))
两者都产生类似的东西:
ID Date Value
1: 0 2013-02-02 5
2: 1 2013-04-02 7
答案 1 :(得分:1)
这是一个看起来很笨拙的基础R方法:
mydf[as.logical(with(mydf, ave(as.numeric(Date), ID,
FUN = function(x) x == min(x)))), ]
# ID Date Value
# 3 0 2013-02-02 5
# 5 1 2013-04-02 7
它适应我的&#34; dplyr&#34;使用ave
向@BrodieG推荐。
答案 2 :(得分:1)
虽然不如data.table和dplyr:
do.call(rbind, lapply(split(df, df$ID), function(x) x[which.min(x$Date), ]))
## ID Date Value
## 0 0 2013-02-02 5
## 1 1 2013-04-02 7