слияние квартальных временных рядов в R - PullRequest
0 голосов
/ 28 сентября 2018

Как объединить серии a и b xts, которые представлены следующим образом:

a:

1948-01-01  1

1948-04-01  1

1948-07-01  1

1948-10-01  1

b: 
1948-03-01 2

1948-06-01 2

1948-09-01 2

1948-12-01 2

Результат должен выглядеть следующим образом

          a   b

1948Q1    1   2

1948Q2    1   2

1948Q3    1   2

1948Q4    1   2

В каком формате дата не имеетматерия, пока a и b выровнены на четверти.Это намного проще сделать с ежемесячным использованием indexFormat () и% b% Y и т. Д., Но для ежеквартального индекса нет доступных индексов.

агрегат (a, as.yearqtr) работает не слишком хорошо, потому что по некоторым причинам он принимает Q2 в качестве первого квартала года.Тогда, если вы хотите взять среднегодовое значение, оно будет принимать Q2, Q3, Q4, Q1 для каждого года вместо Q1-Q4.Итак, я ищу другой метод.Дайте мне знать, если таковой существует.

1 Ответ

0 голосов
/ 28 сентября 2018

Попробуйте это двухэтапное решение:

# Step 1: set rownames as quarters
library(zoo) 
rownames(a) <- format.yearqtr(as.Date(a$V1))
rownames(b) <- format.yearqtr(as.Date(b$V1))
# Step2: merge by rownames (quarters)
merge(a, b, by = "row.names", all = TRUE, suffixes = c(".a",".b"))[, -c(2, 4)]
# output (you can now store the result in a dataframe and change colnames as you want)
  Row.names V2.a V2.b
1   1948 Q1    1    2
2   1948 Q2    1    2
3   1948 Q3    1    2
4   1948 Q4    1    2

Данные

a <- structure(list(V1 = c("1948-01-01", "1948-04-01", "1948-07-01", 
"1948-10-01"), V2 = c(1L, 1L, 1L, 1L)), .Names = c("V1", "V2"
), class = "data.frame", row.names = c("1948 Q1", "1948 Q2", 
"1948 Q3", "1948 Q4"))
b <- structure(list(V1 = c("1948-03-01", "1948-06-01", "1948-09-01", 
"1948-12-01"), V2 = c(2L, 2L, 2L, 2L)), .Names = c("V1", "V2"
), class = "data.frame", row.names = c("1948 Q1", "1948 Q2", 
"1948 Q3", "1948 Q4"))
...