我有一个大型数据集,其中有两个变量,分别是时间和值。我需要为每行创建一个平均滚动平均值的新数据集,以计算过去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"))
答案 0 :(得分:2)
您将看到的大多数方法都涉及以某种方式用大量0 / NA填充数据,并使用rollapply
/ rollmean
(尽管{{1 }},您可以为每个观察值提供自定义窗口大小(根据观察值)。
通过rollapply
包,您可以通过在time列上将表自身连接到表上,从而使我们有效地做到这一点,而我们只考虑前一个小时。
data.table
还有其他选择,例如简单地编写一个“针对每行,查找比我当前时间晚1小时以内的所有行,并计算平均值”的方法-它们只是此方法的“手动”是。