解决方案1
你可以转置(函数t()) 向量化之前的矩阵:
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200), digits = 2),
nrow = 100, ncol = 12))
rownames(dummy.df) <- seq(1901, 2000)
colnames(dummy.df) <- month.abb
dummy.df.ts <- ts(as.vector(t(as.matrix(dummy.df))),
start=c(1901,1), end=c(2000,12), frequency=12)
解决方案2
你可以melt数据,按日期排序,然后应用 ts() 函数。
这是数据设置。如果您的语言设置是英语,您可以使用 Month.abb 保存一些代码,但这对于其他语言区域设置来说并不稳健。
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
months <- format(seq.Date(as.Date("2013-01-01"), as.Date("2013-12-01"),
by = "month"), format = "%b")
colnames(dummy.df) <- months
dummy.df$Year <- seq(1901, 2000) # set as variable, not as rownames
融合数据,这样您就有一个包含 1200 行的数据框,每行代表一个观察结果:
library("reshape2")
dummy.df <- melt(dummy.df, id.vars = "Year")
按日期对观察结果进行排序:
dummy.df$Date <- as.Date(paste(dummy.df$Year, dummy.df$variable, "01", sep = "-"),
format = ("%Y-%b-%d"))
dummy.df <- dummy.df[order(dummy.df$Date), ]
然后您可以应用类似的 ts() 调用,其中 ts 对象显示所需的顺序:
dummy.df.ts <- ts(dummy.df$value, start=c(1901,1), end=c(2000,12), frequency=12)