for(t in 1921:2017) {
nam <- paste("", t, sep = "")
assign(nam, window(aCPI_gr, start=c(t,1), end=c(t,12)))
}
aCPI_gr_y <- cbind(`1921`: `2017`) #doesn't work
此循环使用每年每月的CPI数据生成向量。现在我想将所有这些包装在一个带有cbind的数据框中,但我当然懒得在cbind函数中手动输入每年的矢量。是否有一种简单的方法可以避免每年手工打字?例如cbind(
1921 :
2017 )
答案 0 :(得分:0)
1)矩阵如果您有一个跨越97年的月度一维ts
系列,例如下面的测试系列tser
,那么这会将其转换为12 x 97列,每列一年。如果你不需要名字,可以省略dimnames参数。
tser <- ts(seq_len(12 * 97), start = 1921, freq = 12) # test data
m <- matrix(tser, 12, dimnames = list(month = 1:12, year = 1921:2017))
2)tapply 另一种选择是:
tapply(tser, list(month = cycle(tser), year = as.integer(time(tser))), c)