根据时间获取滚动平均值

时间:2019-01-15 00:27:46

标签: r

我有一个大型数据集,其中有两个变量,分别是时间和值。我需要为每行创建一个平均滚动平均值的新数据集,以计算过去60分钟(包括当前行)中所有值的平均值。

我尝试了一些使用tq_mutate的方法以及其他方法,但是并不能真正做到这一点。

这是示例数据:

data= structure(list(time= structure(c(1407626653, 1407626709, 
1407629849, 1407629927, 1407630463, 1407631433), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), value= c(4, 1, 4, 3, 2, 3
)), .Names = c("time", "value"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

这是预期的结果:

data = structure(list(time = structure(c(1407626653, 1407626709, 1407629849, 
1407629927, 1407630463, 1407631433), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), value = c(4, 1, 4, 3, 2, 3), expected = c(4, 
2.5, 3, 3, 3, 3)), .Names = c("time", "value", "expected"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

1 个答案:

答案 0 :(得分:2)

您将看到的大多数方法都涉及以某种方式用大量0 / NA填充数据,并使用rollapply / rollmean(尽管{{1 }},您可以为每个观察值提供自定义窗口大小(根据观察值)。

通过rollapply包,您可以通过在time列上将表自身连接到表上,从而使我们有效地做到这一点,而我们只考虑前一个小时。

data.table

还有其他选择,例如简单地编写一个“针对每行,查找比我当前时间晚1小时以内的所有行,并计算平均值”的方法-它们只是此方法的“手动”是。