2016-12-11 3 views
1

У меня есть более 300 компаний и вам нужно рассчитать месячный доход для них, а затем использовать его как одну из переменных в моем наборе данных. загрузить цены от Yahoo и рассчитывается ежемесячный возврат используя quantmod пакет:monthReturn и unequal month length

require(quantmod)  
stockData <- lapply(symbols,function(x) getSymbols(x,auto.assign=FALSE, src='yahoo', from = '2000-01-01')) 
    stockDataReturn <- lapply(stockData,function(x) monthlyReturn(Ad(x))) 

У меня есть проблема в том, что некоторые компании имеют разные цели в месяц (за счет торговли останавливается, и т.д.), которая находит свое отражение в списке вывода: 2013-12-30 для компании AAA и 2013-12-31 для компании BBB и остальной выборки.

Когда я сливаю список с помощью

returns <- do.call(merge.xts, stockDataReturn) 

Это создает отдельную строку для 2013-12-30 со всеми для AAA ВПЛ компании, за исключением. Как я могу это решить? Я понимаю, что мне нужно будет придерживаться формата месяца в год, который мне нужно использовать в качестве индекса, прежде чем слить.

В идеале, я хочу, чтобы на этапе monthReturn он использовал начало месяца, а не конец месяца.

ответ

2

Вы можете использовать lubridate's floor_date, чтобы слиться с тем же самым началом месяца timestamp, а не с меткой времени месяца. Или используйте ceiling date для округления до отметки времени месяца для всех ценных бумаг до слияния.

library(lubridate) 
stockDataReturn <- lapply(stockDataReturn, 
           function(x) { 
            index(x) <- floor_date(index(x), "month") 
            # Or if you want to round to end of month change to: 
            # index(x) <- ceiling_date(index(x), "month") 
            x 
           }) 
returns <- do.call(merge, stockDataReturn) 
colnames(returns) <- symbols 
+0

Спасибо! это сработало! – m45ha

+0

Это очень полезно. Как мы получаем последний день месяца? 'ceiling_date (index (x)," month ") -1'? –

+0

@ R.S. Да, который может работать с объектами даты в векторе индекса, но более безопасный подход, который работает с объектами POSIXct в векторе индекса, - это 'index (x) <- ceiling_date (index (x)," month ") - days (1) ' – FXQuantTrader