在ddply中进行汇总时获取which.max的行名

时间:2015-08-08 07:24:28

标签: r plyr

我有以下数据,并希望获得每年最高收盘价的最新日期。

> str(ndvdf)
'data.frame':   1374 obs. of  2 variables:
 $ Close: num  150 150 150 150 150 ...
 $ Year : num  2009 2009 2009 2009 2009 ...
> head(ndvdf)
            Close Year
2010-01-04 150.34 2009
2010-01-05 150.34 2009
2010-01-06 150.34 2009

我尝试了以下但是行索引是返回而不是日期,并且索引是针对每个年度子集的,因此很难使用rownames来获取日期。

> ddply(ndvdf, .(Year), summarise, MaxDate=which.max(Close))
  Year MaxDate
1 2009      60
2 2010     244
3 2011     245

如何从我的数据中获取日期? 感谢。

1 个答案:

答案 0 :(得分:1)

以下是一些可重现的样本数据:

set.seed(19)
df <- data.frame(Close = sample(150, 10), Year = sample(2000:2003, 10, TRUE))
rownames(df) <- Sys.Date() + 1:10

我更喜欢在这里使用 data.table 包。我们可以将as.data.tablekeep.rownames = TRUE一起使用,并使用它来轻松获取&#34;关闭&#34;的行名称(日期)。每个&#34;年&#34;是最大的。

library(data.table)
as.data.table(df, keep.rownames = TRUE)[, rn[which.max(Close)], keyby = Year]
#    Year         V1
# 1: 2000 2015-08-13
# 2: 2001 2015-08-17
# 3: 2002 2015-08-16
# 4: 2003 2015-08-18