【发布时间】:2013-07-29 18:50:52
【问题描述】:
我试图弄清楚如何在不循环的情况下执行以下操作。我有一个融合的时间、研究地点和流程数据集,如下所示:
日期时间网站流程
2009 年 6 月 1 日 00:00 EBT 北美
2009 年 6 月 2 日 01:00 EBT 北美
2009 年 6 月 3 日 02:00 EBT 0.1
2009 年 6 月 4 日 03:00 EBT 北美
2009 年 6 月 5 日 04:00 EBT 北美
2009 年 6 月 1 日 00:00 MUT 0.4
2009 年 6 月 2 日 01:00 MUT 0.3
2009 年 6 月 3 日 02:00 MUT 0.2
2009 年 6 月 4 日 03:00 MUT NA
2009 年 6 月 5 日 04:00 MUT NA
我需要按站点对其进行子集化,然后在至少有两个后续流量测量的时间段内,我需要执行几个计算,*例如当前和先前测量的平均值。
诀窍是我需要对每组连续测量进行平均,即如果后两个连续测量三个,我需要该测量的平均值和前一个测量的平均值。我在示例数据框中添加了一个目标列,其中包含我想要获得的结果。*
我希望得到一个外观相似的数据框,其中包含日期时间、站点和计算结果。每个站点都有一个完整的时间序列。
感谢您的帮助!
数据生成器:
structure(list(datetime = structure(c(1167627600, 1167717600,
1167807600, 1167897600, 1167987600, 1167627600, 1167717600, 1167807600,
1167897600, 1167987600, 1168077600, 1168167600, 1168257600, 1168347600,
1168437600), class = c("POSIXct", "POSIXt"), tzone = ""), site = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("EBT",
"MUT"), class = "factor"), flow = c(NA, 0.1, NA, NA, NA, NA,
0.4, 0.2, NA, NA, 0.4, 0.2, 0.1, NA, NA), goal = c(NA, NA, NA,
NA, NA, NA, NA, 0.3, NA, NA, NA, 0.3, 0.15, NA, NA)), .Names = c("datetime",
"site", "flow", "goal"), row.names = c(NA, -15L), class = "data.frame")
【问题讨论】:
-
您能否提供您正在寻找的结果数据集?您可以使用 R 中的许多工具轻松做到这一点...
library(data.table); s=data.table(sample); s[, mean(flow), by=site]... -
编辑问题更清晰,并添加示例输出。谢谢!
标签: r time-series subset