我有一个包含100年(1200个数据点)每月数据的数据框,其中列为月份,行为年份。我想将其转换为每月时间序列,并尝试了几种方法,但没有一种能创建正确的"时间"结构。
问题在于R将数据框视为12个变量(月份)的100个观测值(年份)。以下是我最新尝试的可重现代码:
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”对象中,行和列被交换了,而且列中的观测值不是按顺序排列的,所有一月份、二月份等都被依次堆叠在一起。如何才能得到正确的时间结构?
我的数据示例:这些是从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
显示的数据中经历过列和行之间的这种“切换”。也许你可以使用你的一些数据样本,只需几年的数据,并发布你得到的图表,以获得更好的答案。 - Micheleround(seq(5,10,length.out=24),1)
是一个向量。 - Michele