2015-08-08 1 views
0

У меня есть следующие данные и вы хотите получить даты, когда Close находится на максимальном уровне за каждый год.получение строки имя which.max при выполнении суммирования в ddply

> 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

Вот некоторые воспроизводимые данные выборки:

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.table с keep.rownames = TRUE и использовать это, чтобы легко получить имена строк (даты), когда «Закрыть» имеет максимальное значение для каждого «года».

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