【发布时间】:2017-02-10 15:18:24
【问题描述】:
我在尝试按 10 分钟但在 24 小时向量内计算平均温度时遇到问题。
我有一个时间序列以正确的 POSIX 格式存储在数据框中。唯一的问题是数据间隔不规则(10 +-3 分钟)。
我知道如何以小时、天、月年为单位对它们进行平均但我需要对 24、72 或 168 小时的配置文件进行平均。
例如,对于 168 小时的配置文件,我想在观察期间的每个星期一 00:00:00 平均,然后是 00:10:00、00:20:00 等,然后是每个星期二、星期三等。
所以我的数据平均值必须适合常规的 24/72/168 向量。
对于 24 小时向量将定义如下:
seq(ISOdatetime(2001,2,3,0,0,0), ISOdatetime(2001,2,4,0,0,0), by=(60*5))
产生一个常规的 24 小时向量source of this solution here
[1] "2001-02-03 00:00:00 PST" "2001-02-03 00:05:00 PST"
[3] "2001-02-03 00:10:00 PST" "2001-02-03 00:15:00 PST"
[5] "2001-02-03 00:20:00 PST" "2001-02-03 00:25:00 PST"
[7] "2001-02-03 00:30:00 PST" "2001-02-03 00:35:00 PST"
[9] "2001-02-03 00:40:00 PST" "2001-02-03 00:45:00 PST"
问题是我的数据的时间戳每天都在变化,您可以从下面的示例中看到。 2016-09-01 初读(预计为 00:00:00)为 00:01:00,次日为 00:04:00,次日为 00:07:00,以此类推。
我尝试了xts 和zoo,但没有成功,因为聚合的限制是小时,我需要以分钟为单位定义它。
我发现的多个答案通过连续的数据集处理平均时间序列(example1,example2。
很遗憾,我找不到关于我的问题的答案。
示例数据库的结构:
'data.frame': 9490 obs. of 2 variables:
$ Date_Time_Stamp : POSIXct, format: "2016-09-01 00:01:00" "2016-09-01 00:11:00" "2016-09-01 00:22:00" "2016-09-01 00:32:00" ...
$ Signal_Raw_Value: num 778 694 592 523 567 ...
我的数据看起来像这样(头部)
Date_Time_Stamp Signal_Raw_Value
1 2016-09-01 00:01:00 777.51
2 2016-09-01 00:11:00 694.38
3 2016-09-01 00:22:00 591.69
4 2016-09-01 00:32:00 523.23
5 2016-09-01 00:42:00 567.24
6 2016-09-01 00:52:00 547.68
尾巴:
Date_Time_Stamp Signal_Raw_Value
9485 2016-11-06 23:02:00 660.15
9486 2016-11-06 23:12:00 635.70
9487 2016-11-06 23:22:00 498.78
9488 2016-11-06 23:32:00 415.65
9489 2016-11-06 23:42:00 425.43
9490 2016-11-06 23:53:00 440.10
2016-09-01 的第一个小时
Date_Time_Stamp Signal_Raw_Value
1 2016-09-01 00:01:00 777.51
2 2016-09-01 00:11:00 694.38
3 2016-09-01 00:22:00 591.69
4 2016-09-01 00:32:00 523.23
5 2016-09-01 00:42:00 567.24
6 2016-09-01 00:52:00 547.68
7 2016-09-01 01:02:00 562.35
第二天的第一个小时(2016-09-02)
143 2016-09-02 00:04:00 557.46
144 2016-09-02 00:14:00 557.46
145 2016-09-02 00:24:00 562.35
146 2016-09-02 00:35:00 552.57
147 2016-09-02 00:45:00 503.67
148 2016-09-02 00:55:00 484.11
149 2016-09-02 01:05:00 454.77
连续第三天的第一个小时(2016-09-03)
285 2016-09-03 00:07:00 655.26
286 2016-09-03 00:17:00 537.90
287 2016-09-03 00:27:00 464.55
288 2016-09-03 00:38:00 454.77
289 2016-09-03 00:48:00 425.43
290 2016-09-03 00:58:00 420.54
291 2016-09-03 01:08:00 400.98
第四天:
426 2016-09-04 00:00:00 865.53
427 2016-09-04 00:10:00 723.72
428 2016-09-04 00:20:00 621.03
429 2016-09-04 00:30:00 562.35
430 2016-09-04 00:40:00 493.89
431 2016-09-04 00:51:00 459.66
432 2016-09-04 01:01:00 435.21
处理信号的原始值后,我需要生成如下内容: 24 hrs profile 和 168 小时:168 hrs profile。
谢谢!
【问题讨论】:
-
解决此问题的一种方法是使用 seq 函数创建一个从数据开始到结束的 10 分钟间隔的数组。使用新创建的数组作为 break 参数的 cut 函数。现在您可以聚合但新定义的切割值
-
我在以下(优雅?)解决方案方面取得了部分成功:聚合(qxts,格式(索引(qxts),“%H”),平均值)这会产生每小时的每小时平均值。我坚持将间隔更改为 10 或 15 分钟。任何想法如何继续?
标签: r datetime time time-series average