2016-06-26 3 views
1

У меня есть данные временного ряда R, где я рассчитываю средства для всех значений до определенной даты и сохраняю это значение в дате + 4 квартала. Даты заканчиваются на конец месяца. Чтобы достичь этого, я хочу увеличить 4 квартала до даты. Мой вопрос в том, как я могу добавить 4 квартала к типу данных даты R. Иллюстрация:Добавление кварталов к дате R

a <- as.Date("2006-01-01") 
b <- as.Date("2011-01-01") 
date_range <- quarter(seq.Date(a, b, by = "quarter"), with_year = TRUE) 

> date_range[1] + 1 
[1] 2007.1 

> date_range[1] + quarter(1) 
[1] 2007.1 

> date_range[1] + 0.25 
[1] 2006.35 

Один из возможных способов, по-моему, состоит в том, чтобы получить даты года и затем добавить 4 к нему. Но не был уверен, что это лучший способ сделать это?

+1

Возможно, проще использовать обозначение '.25', например, временные ряды, например. 'time (ts (NA, start = 2006, end = 2011, frequency = 4))' – alistaire

ответ

1

Просто добавьте 12 месяцев или год вместо этого?

Или, если это должно быть помещение, определить себя функцию, например, так:

quarters <- function(x) { 
    months(3*x) 
} 

, а затем использовать его, чтобы добавить к последовательности дата:

date_range <- seq.Date(a, b, by = "quarter") 
date_range + quarters(4) 
1

Проблема в том, что кварталы имеют разной длины. Q1 является самым коротким, поскольку он включает февраль (хотя он связан с Q2 в високосные годы). Такие вещи делают «добавление квартала к дате» плохо определено. Даже добавление месяцев к дате может быть сложным в конце месяца - через 1 месяц после 31 января?

Начальные месяцы более просты, и я рекомендую вам использовать первый день квартала, а не последний (если вы должны использовать определенную дату). lubridate предоставляет такие функции, как floor_date() и ceiling_date(), на которые вы можете пройти unit = "quarter", и они вернут первый день текущего или последующего квартала соответственно. Вы также можете всегда добавлять months(3) в день на , начинающемся месяца, хотя, конечно, если вы намерены добавить 4 квартала, вы можете просто добавить 1 год.