如何在时间序列数据中找到平均值

时间:2017-10-26 09:23:12

标签: r time-series

我有时间序列数据(分钟数据)。我想用R计算每30分钟数据的平均值,而我不想计算移动平均线。

数据如下:

      data              date
1   0.138685809     2016-08-13 15:17:01.152
2   1.724535157     2016-08-13 15:23:09.153
3   3.691574663     2016-08-13 15:29:17.139
4   11.225038913    2016-08-13 15:35:25.131
5   2.415299764     2016-08-13 15:41:33.132
6   0.569204804     2016-08-13 15:47:41.136
7   9.324725292     2016-08-13 15:53:49.137
8   17.232072439    2016-08-13 15:59:57.140
9   20.876006587    2016-08-13 16:06:05.140
10  10.911137327    2016-08-13 16:12:13.144

2 个答案:

答案 0 :(得分:0)

嗯,我不知道一些非常优雅的解决方案,但有一种可能性:

让我们说你的数据是这样的:

        value       date         time
1   0.1386858 2016-08-13 15:17:01.152
2   1.7245352 2016-08-13 15:23:09.153
3   3.6915747 2016-08-13 15:29:17.139
4  11.2250389 2016-08-13 15:35:25.131
5   2.4152998 2016-08-13 15:41:33.132
6   0.5692048 2016-08-13 15:47:41.136
7   9.3247253 2016-08-13 15:53:49.137
8  17.2320724 2016-08-13 15:59:57.140
9  20.8760066 2016-08-13 16:06:05.140
10 10.9111373 2016-08-13 16:12:13.144

从你的角色变量创建时间变量

library(chron)
data$time <- chron(times = data$time)

计算时间差异,然后应用累计和

time_spent <- c(0, cumsum(diff(data$time)))
data$time_spent <- chron(times = time_spent)

然后将time_spent变量切换为30分钟间隔

data$time_parts <- cut(data$time_spent, 
                       c(seq(times(0), max(data$time_spent), by = times(30/(60*24))), max(data$time_spent)), 
                       include.lowest = T)

最后计算每30分钟间隔的平均值:

aggregate(data$value, by = list(data$time_parts), FUN = mean)

希望这有帮助。

编辑:您还可以找到一些灵感here

答案 1 :(得分:0)

我有一个使用data.table的答案。 我们的想法是创建一个列,为每个30分钟切片提供索引,然后使用by函数计算每张幻灯片的平均值。 这是有效的,需要两行:

library(data.table)
DT <- setDT(yourdataframe)

DT[,datepos := as.POSIXct(date,format = "%Y-%m-%d %H:%M:%OS")] { just to have a standart format
DT[,datediffindex := as.numeric((datepos - .SD[1,datepos])/60 )%/% 30]

这里我创建了datediffindex列,它是每个30分钟数据片段的索引。 SOI计算时间列与其第一个值之间的差异,我将每60分为几分钟,然后取每30分区的整数,这就是你的指数 然后我们只需要对索引的每个值进行均值:

DT[, datamean := mean(data), by = datediffindex]

它提供了你想要的东西

          data                    date             datepos datediffindex  datamean
 1:  0.1386858 2016-08-13 15:17:01.152 2016-08-13 15:17:01             0  3.839027
 2:  1.7245352 2016-08-13 15:23:09.153 2016-08-13 15:23:09             0  3.839027
 3:  3.6915747 2016-08-13 15:29:17.139 2016-08-13 15:29:17             0  3.839027
 4: 11.2250389 2016-08-13 15:35:25.131 2016-08-13 15:35:25             0  3.839027
 5:  2.4152998 2016-08-13 15:41:33.132 2016-08-13 15:41:33             0  3.839027
 6:  0.5692048 2016-08-13 15:47:41.136 2016-08-13 15:47:41             1 11.782629
 7:  9.3247253 2016-08-13 15:53:49.137 2016-08-13 15:53:49             1 11.782629
 8: 17.2320724 2016-08-13 15:59:57.140 2016-08-13 15:59:57             1 11.782629
 9: 20.8760066 2016-08-13 16:06:05.140 2016-08-13 16:06:05             1 11.782629
10: 10.9111373 2016-08-13 16:12:13.144 2016-08-13 16:12:13             1 11.782629