我有一个100年(1200个数据点)的月数据的数据框,行和列中的月份在行中。我想将它转换为每月的时间序列,我尝试了几种方法,但都没有创建正确的“时间”结构。将数据帧转换为月度时间序列
问题在于R将数据框视为100个12个变量(月)的观察值(年)。这里是我的最新尝试可重复码:
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
rownames(dummy.df) <- seq(from=1901, to=2000)
colnames(dummy.df) <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
dummy.df.ts <- ts(as.vector(as.matrix(dummy.df)), start=c(1901,1), end=c(2000,12), frequency=12)
在“dummy.df.ts”对象的行和列在列顺序意见交换,而是所有的januarys februarys等堆叠在一起一个接一个地。我怎样才能达到正确的时间结构?
我的数据的一个例子:这是从1901年每月的温度值 - 1905年
fr.monthly.temp.sample
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8
,并通过使用该TS()调用:
fr.monthly.temp.sample.ts <- ts(as.vector(as.matrix(fr.monthly.temp.sample)), start=c(1901,1), end=c(1905,12), frequency=12)
这是输出我得到的时间序列对象:
fr.monthly.temp.sample.ts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1901 2.7 4.1 3.8 3.0 1.7 0.4 3.2 5.9 4.6 4.0 4.7 7.5
1902 7.6 5.5 7.4 10.0 10.3 7.1 10.3 9.3 13.0 10.0 12.9 13.6
1903 11.9 16.9 15.1 14.9 16.3 16.5 19.2 18.2 17.6 20.2 20.0 18.3
1904 17.4 17.3 18.5 17.6 15.7 15.0 15.5 13.9 14.7 10.6 10.2 12.1
1905 11.2 8.4 4.9 6.3 6.9 5.4 5.5 3.5 3.5 2.7 4.8 3.8
- 注改变的时间结构(从列中的值现在是在排..) -
感谢。
我编辑了我的答案。我实际上并没有体验到由'plot'显示的数据中的cols和rows之间的“切换”。也许你可以使用你的数据样本,仅仅几年,并发布你得到的图表,得到更好的答案。 – Michele 2013-04-27 10:43:03
我已经添加了我的原始数据和图表,以显示错误的值排序。你的编辑1解决方案给我一个多变量的时间序列,这不是我想要的,我想保留它作为一个单变量系列进一步处理..至于编辑2,我试图as.vector()出于同样的原因,但是导致订购问题的操作。也许@Alexander发布的解决方案#1将工作,我仍然必须尝试.. – avg 2013-04-27 12:37:23
我的编辑1不是一个解决方案......它只是为了了解ts()如何工作。我的编辑2以矢量数据ALREADY开始......我没有意识到你只需要一个转置......'round(seq(5,10,length.out = 24),1)'是一个矢量。 – Michele 2013-04-27 13:07:07