1

我有一个包含以下内容的数组:

> head(MEAN)
1901DJF     1901JJA     1901MAM     1901SON     1902DJF     1902JJA 
-0.45451556 -0.72922229 -0.17669396 -1.12095590 -0.86523850 -0.04031273 

这应该是一个从 1901 年到 2009 年具有季节性平均值的时间序列。问题是生成的列标题是严格按字母顺序排列的。然而,就季节而言,这并没有多大意义,例如,JJA(6、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)

可能还有一种更优雅的方法来计算季节性平均值......

4

2 回答 2

1

您可以更改因子水平的顺序:

pdsi[["seasyear"]] = factor(pdsi[["seasyear"]], levels = c("1901DJF", "1901MAM", etc))
于 2013-09-24T08:11:23.050 回答
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 以反映该顺序。同样,它假设您的数据在原始文件中按时间顺序排列,但我认为这是一个安全的假设。如果不是这样,请道歉。

于 2013-09-30T02:30:42.777 回答