如何从 R 中的每小时多系列 XTS 获取昼夜周期?

How to get diurnal cycle from hourly multiseries XTS in R?

我有一个一年中四个地点的每小时降雨时间序列如下。我想计算所有四个位置全年一天中所有 24 小时的总和或平均值。这是气象学中的常见分析,称为昼夜变化。 这将使我了解这些地点的降雨首选时间。在 xts/zoo 包中有没有简单的方法来做到这一点?

head(rg_hr_xts)
                     rg1  rg2  rg3  rg4 
2018-06-01 00:59:17  1.0  0.0    0    0    
2018-06-01 01:59:17  0.2  0.0    0    0    
2018-06-01 02:59:17  0.0  0.2    0    0 
2018-06-01 03:59:17  0.0  1.6    0    0   
2018-06-01 04:59:17  0.0  3.4    0    0   
2018-06-01 05:59:17  0.0  0.8    0    0

注:我用过.indexhour(rg_hr_xts) 这给了我每个索引的时间如下

0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
20 21 22 23  0  1  2  3  4  5  6  7

我想对索引为 0、1、2 的所有小时求和,得到一个小时索引为 0-23 的数据框和该小时的降雨量总和。

我希望输出数据帧的结构如下:

hour  rg1  rg2  rg3  rg4 
   0  0.3  0.7  1.2  0.4 
   1  1.3  1.5  1.3  1.3 
   2  1.5  1.7  1.9  1.8 
   3  2.0  2.5  2.6  2.9 
   4  2.1  2.9  3.5  3.6

您可以使用 aggregate() 按一天中的小时计算总和。

library(xts)
# Some reproducible example data
n <- 1e4
set.seed(21)
x <- .xts(cbind(rg1 = runif(n), rg2 = runif(n)), 1:n * 3600 + runif(n)*100)

# Aggregate by hour of the day
y <- aggregate(x, by = .indexhour(x), FUN = sum)

aggregate() 的结果将是一个带有一天中小时索引的动物园对象。然后您可以使用 data.frame() 将其转换为 data.frame.

data.frame(hour = index(y), y)
#    hour      rg1      rg2
# 0     0 214.3876 211.5131
# 1     1 215.5521 205.4340
# 2     2 206.1494 211.7510
# 3     3 223.9533 209.5391
# 4     4 202.8989 211.6612
# 5     5 198.6387 203.7809
# 6     6 218.7807 218.9829
# 7     7 205.2797 214.6127
# 8     8 207.2061 219.2323
# 9     9 217.2509 208.9815
# 10   10 218.4591 202.3216
# 11   11 205.6799 219.2482
# 12   12 206.8984 209.7392
# 13   13 209.4091 205.2837
# 14   14 212.0559 213.2387
# 15   15 211.8372 204.3384
# 16   16 206.5818 221.5508
# 17   17 212.1076 214.9638
# 18   18 219.3799 205.4536
# 19   19 202.6254 202.2210
# 20   20 208.5686 208.5411
# 21   21 213.2116 218.9530
# 22   22 210.6371 207.5539
# 23   23 197.8964 203.9069