R中季度时间序列的合并
如何合并如下所示的a和b xts系列:R中季度时间序列的合并,r,merge,xts,R,Merge,Xts,如何合并如下所示的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:
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)效果不太好,因为出于某种原因,它将第二季度作为一年的第一季度。然后,如果你想取年平均值,那么每年都要取第二季度、第三季度、第四季度、第一季度,而不是第一季度到第四季度。所以,我正在寻找另一种方法。如果有,请告诉我 尝试以下两步解决方案:
# 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
#步骤1:将行名设置为四分之一
图书馆(动物园)
rownames(a)谢谢,但要做到这一点,首先需要提取索引,更正它,然后将其与序列一起放回。很多系列赛都很难做到。有没有办法直接在xts对象上执行此操作?yq非常感谢!我还发现了一个更简单的解决方案:索引(a)=(as.yearqtr(索引(a)))。它将%Y%m%d格式更改为Y Q。
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"))