【发布时间】:2018-10-21 01:34:41
【问题描述】:
我有一组 10 分钟移动平均的天气数据,以 1 分钟的间隔显示。我想将其转换为 1 小时平均值。
Date Direction Speed
1 2017-07-06 00:01:00 93 7.3
2 2017-07-06 00:02:00 92 7.4
3 2017-07-06 00:03:00 92 7.3
4 2017-07-06 00:04:00 91 7.4
5 2017-07-06 00:05:00 91 7.3
6 2017-07-06 00:06:00 91 7.3
7 2017-07-06 00:07:00 91 7.2
8 2017-07-06 00:08:00 90 7.1
9 2017-07-06 00:09:00 90 6.9
10 2017-07-06 00:10:00 91 6.7
...
(thousands of row of data in 1 min-interval
* 以上方向和速度为 10 分钟移动平均线
对于正常的移动平均内置函数,它们会遇到每个邻域值,例如:
rollmean(timeLine$Speed, 60, fill=FALSE, align = "right")
将在遇到 n、n-1、n-2、n-3、...、n-59 的每个值上产生滚动平均值。
但是,由于我的原始数据已经是 10 分钟的平均值,我只需取值 n、n-10、n-20、n-30、n-40、n-50 即可将其转换为每小时平均值。
例如,如果我想要 2001-07-06 10:00:00 的每小时数据,我只需对以下各项取平均值:
- 2001-07-06 10:00:00
- 2001-07-06 09:50:00
- 2001-07-06 09:40:00
- 2001-07-06 09:30:00
- 2001-07-06 09:20:00
- 2001-07-06 09:10:00
有什么方法可以让我在 R 上顺利计算吗?
提前感谢您的帮助!
更新 1:这是 dput(head(timeLine, 10))
structure(
list(
Date = structure(c(1499270460, 1499270520, 1499270580, 1499270640, 1499270700, 1499270760, 1499270820, 1499270880, 1499270940, 1499271000),
class = c("POSIXct", "POSIXt"), tzone = "Asia/Hong_Kong"),
Direction = c(93L, 92L, 92L, 91L, 91L, 91L, 91L, 90L, 90L, 91L),
Speed = c(7.3, 7.4, 7.3, 7.4, 7.3, 7.3, 7.2, 7.1, 6.9, 6.7)),
.Names = c("Date", "Direction", "Speed"),
row.names = c(NA, 10L),
class = "data.frame")
【问题讨论】:
-
你应该发布
dput(timeLine)的输出,因为它是一个 data.table 对象;至少它prints 像一个。发布print表示形式使其成为一种 PITA 以使其正确解析。即使是非常灵活的fread函数也会给你 5 列,而你显然只有 3 列。遗憾的是,POSIXt 列的默认打印输出有空格。 -
感谢您的建议。
dput(head(timeLine, 10))的输出是structure(list(Date = structure(c(1499270460, 1499270520, 1499270580, 1499270640, 1499270700, 1499270760, 1499270820, 1499270880, 1499270940, 1499271000), class = c("POSIXct", "POSIXt"), tzone = "Asia/Hong_Kong"), Direction = c(93L, 92L, 92L, 91L, 91L, 91L, 91L, 90L, 90L, 91L), Speed = c(7.3, 7.4, 7.3, 7.4, 7.3, 7.3, 7.2, 7.1, 6.9, 6.7)), .Names = c("Date", "Direction", "Speed"), row.names = c(NA, 10L), class = "data.frame")
标签: r moving-average