R годовой доход от фрейма данных с датой и закрытием

У меня есть data.frame df с датой df$Date и закрытым df$Close столбцом. Я пытаюсь получать годовые отчеты, но у меня проблемы

Я пытался

library(quantmod)
yr <- data.frame( periodReturn(df, period='yearly', subset='2008::'))

а также имеет дату в качестве имени, но не может заставить ее работать. Спасибо за помощь.


person adam.888    schedule 05.06.2012    source источник
comment
Какие именно у вас проблемы? Можете ли вы предоставить образец ваших данных? Это позволит нам воспроизвести конкретную проблему, с которой вы столкнулись. Однако без этого очень поможет простое описание проблемы и ошибки, которую вы видите при выполнении второй строки.   -  person Justin    schedule 05.06.2012
comment
Например, пост dput(df) или, если он слишком большой, str(df) и head(df)   -  person nico    schedule 05.06.2012


Ответы (1)


Ваш код почти работает, если вы просто конвертируете его в xts. Если у вас возникли проблемы с преобразованием вашего data.frame в xts, предоставьте дополнительную информацию о своих данных, как указано в комментариях к вашему вопросу.

getSymbols("SPY", src='yahoo', return.class='data.frame')
#[1] "SPY"
class(SPY)
#[1] "data.frame"
as.data.frame(periodReturn(xts(SPY[["SPY.Close"]], as.Date(rownames(SPY))), 
                           'yearly', subset="2008/"))
           yearly.returns
2008-12-31   -0.382805554
2009-12-31    0.234929078
2010-12-31    0.128409907
2011-12-30   -0.001988072
2012-06-04    0.020717131
person GSee    schedule 05.06.2012
comment
Большое Вам спасибо. Это очень полезно. - person adam.888; 06.06.2012
comment
@ adam.888, вам не нужно преобразовывать его в xts. Предполагается, что функция сделает это за вас, но в periodReturn есть две небольшие опечатки, которые не позволяют if работать напрямую с data.frames. Я отправил автору патч по электронной почте. - person GSee; 06.06.2012
comment
@ adam.888, Патч применен в Rev.580 на R-forge. Вы можете проверить его и собрать самостоятельно (или подождать, пока R-forge построит его, или подождать еще дольше, пока он не будет отправлен в CRAN). В этой версии periodReturn(SPY, 'yearly', subset='2008/') будет работать. - person GSee; 12.06.2012
comment
Это отлично. Большое спасибо. - person adam.888; 17.06.2012