如何将R中多变量时间序列转换为单序列并绘制单张图?
解决方案
要把第二个数据集转成单时间序列并生成一张图,核心是把二维矩阵扁平化为一维向量,再重新构建时间序列对象,具体修改如下:
修改后的完整代码
library(Matrix) i <- c(1, 3, 8, 4, 2, 7, 6, 9, 1, 4, 10, 5, 11, 2, 12) j <- c(2, 5, 3, 8, 6, 2, 4, 2, 4, 5, 2, 7, 3, 2, 1) x <- rpois(15, 5) M4 <- sparseMatrix(i, j, x = x) M4_regular_matrix <- as(M4, "matrix") # 关键步骤:把二维矩阵转成一维向量(默认按列顺序拼接,要按行的话用as.vector(t(M4_regular_matrix))) single_ts_vector <- as.vector(M4_regular_matrix) # 构建单时间序列对象,可按需设置起始时间和周期(比如模拟月度周期设frequency=12) single_timeseries <- ts(single_ts_vector, frequency=12, start=c(1,1)) print(single_timeseries) plot.ts(single_timeseries)
关键逻辑说明
- 原代码中
ts(M4_regular_matrix)会把矩阵的每一列当作一个独立时间序列,所以绘图时生成8张子图; - 用
as.vector()把矩阵转成一维向量后,再传入ts()就会生成单一的时间序列; - 如果需要自定义时间轴的起始点和周期(比如和第一个例子一样的月度周期),可以在
ts()里指定frequency和start参数,不指定的话会用默认的连续索引。
内容的提问来源于stack exchange,提问作者user149054
相关产品推荐
相关产品推荐

