我有一个包含以下内容的数组:
> head(MEAN)
1901DJF 1901JJA 1901MAM 1901SON 1902DJF 1902JJA
-0.45451556 -0.72922229 -0.17669396 -1.12095590 -0.86523850 -0.04031273
这应该是从1901年到2009年的季节性平均值的时间序列。问题是生成的列头严格按字母顺序排列。然而,就季节而言,这并没有多大意义,例如: JJA(7月,7月,8月)领导MAM(3月4日,5月)。
如何切换阵列的每个MAM和JJA条目?
PS:MEAN是在data.frame pdsi
上应用tapply生成的> head(pdsi)
date scPDSI month seas seasyear
1 1901-01-01 -0.10881074 Jan DJF 1901DJF
2 1901-02-01 -0.22287750 Feb DJF 1901DJF
3 1901-03-01 -0.12233192 Mär MAM 1901MAM
4 1901-04-01 -0.04440915 Apr MAM 1901MAM
5 1901-05-01 -0.36334082 Mai MAM 1901MAM
6 1901-06-01 -0.52079030 Jun JJA 1901JJA
>
> MEAN <- tapply(pdsi$scPDSI, ts.pdsi$seasyear, mean, na.rm = T)
可能还有一种更为优雅的计算季节性方法的方法......
答案 0 :(得分:1)
您可以更改因子级别的顺序:
pdsi[["seasyear"]] = factor(pdsi[["seasyear"]], levels = c("1901DJF", "1901MAM", etc))
答案 1 :(得分:0)
我认为这是重新排序方法的一种相当简单的方法,但是,它确实假设您的数据已按时间顺序排列在数据集中。所以,如果这有,这应该工作。
我还创建了一些随机数据,而不是复制数据,但结果应该是相同的
seasons = c("1901DJF", "1901MAM", "1901JJA")
seasons = rep(seasons, c(2, 3, 1))
data = data.frame(runif(1:6), seasons)
MEAN = tapply(data[,1], data[,2], mean)
1901DJF 1901JJA 1901MAM
0.5799779 0.3724785 0.6514327
order = unique(seasons)
MEAN[order]
1901DJF 1901MAM 1901JJA
0.5799779 0.6514327 0.3724785
这样做是在数据集中采用seasyear的顺序,并重新排序对象MEAN以反映该顺序。同样,它假设您的数据在原始文件中按时间顺序排序,但我认为这是一个安全的假设。如果不是这样,请道歉。