聚合,日期,值

时间:2014-04-21 15:59:18

标签: r aggregate

我是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

任何时候都会受到赞赏。

3 个答案:

答案 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