r
  • date
  • subset
  • xts
  • 2016-08-21 1 views 1 likes 
    1

    Я Подменю в xts объект с помощью последовательности as.Date:Как подмножество XTS от последовательности Date, которая рассматривает рабочих дней

    library("quantmod") 
    
    getSymbols("AAPL",from="2003-01-01") 
    # indx sequence 
    indx <- seq(as.Date('2003-03-31'), length.out=200, by='4 weeks') 
    
    SELECT <- AAPL[paste(indx)] 
    

    Если вы посмотрите на последние 2 ряда в SELECT, я вижу что он перескакивает с 2016-06-06 на 2016-08-01, который не 4 недели. Не хватает 2016-07-04, но так как это не рабочий день, он пропускает его. Как я могу вернуть SELECT, который вернет следующий рабочий день, если indx не является рабочим днем? в этом примере он должен вернуть 2016-07-05 ...

    ответ

    1

    К бизнес-дню, я думаю, вы имеете в виду торговый день для AAPL, и в этом случае ваши рабочие дни действительно являются временными индексами безопасности AAPL.

    Первых принципы рода подход с использованием даты факта может увеличиваться на 1:

    indx <- seq(as.Date('2003-03-31'), length.out=200, by='4 weeks') 
    indx <- indx[indx < as.Date(end(AAPL))] 
    while(!all(indx %in% as.Date(index(AAPL)))) { 
        # You ask for the next available business day: 
        indx[!indx %in% as.Date(index(AAPL))] <- indx[!indx %in% as.Date(index(AAPL))] + 1 
        # Careful that the last indx value does not go past as.Date(end(AAPL)) 
        if (indx[length(indx)] > as.Date(end(AAPL))) { 
         indx[length(indx)] <- as.Date(end(AAPL)) 
        } 
    } 
    
    SELECT <- AAPL[indx] 
    tail(SELECT) 
    # AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted 
    # 2016-03-14 101.91 102.91 101.78  102.52 25076100  101.35055 
    # 2016-04-11 108.97 110.61 108.83  109.02 29407500  107.77640 
    # 2016-05-09  93.00  93.77 92.59  92.79 32936400  92.29005 
    # 2016-06-06  97.99 101.89 97.55  98.63 23292500  98.09858 
    # 2016-07-05  95.39  95.40 94.46  94.99 27705200  94.47819 
    # 2016-08-01 104.41 106.15 104.41  106.05 38167900  105.47860 
    

    Вы можете также найти решение через timeDate пакет полезного в более общем для бизнеса даты типа Подменит. например http://stackoverflow.com/questions/13673895/r-time-series-data-daily-only-working-days

    Смежные вопросы