我很欣赏那里有类似的问题,但是,我似乎无法为我的查询找到正确的答案。我有一个数据集,我想根据我的时间戳以 5 分钟的间隔对一列中的数据进行平均,平均从小时的开始开始,例如,在前 5 分钟的 10:00 平均将是 09:56-10:00。
这是我的数据集的示例:
data <- structure(list(datetime = c("11/07/2013 19:20", "11/07/2013 19:21",
"11/07/2013 19:22", "11/07/2013 19:23", "11/07/2013 19:24", "11/07/2013 19:25",
"11/07/2013 19:26", "11/07/2013 19:27", "11/07/2013 19:28", "11/07/2013 19:29",
"11/07/2013 19:30", "11/07/2013 19:31", "11/07/2013 19:32", "11/07/2013 19:33",
"11/07/2013 19:34", "11/07/2013 19:35", "11/07/2013 19:36", "11/07/2013 19:37",
"11/07/2013 19:38", "11/07/2013 19:39", "11/07/2013 19:40", "11/07/2013 19:41",
"11/07/2013 19:42", "11/07/2013 19:43", "11/07/2013 19:44", "11/07/2013 19:45"
), met = c(-24.24081371, -24.4280008, -24.35142264, -24.84884114,
-25.06214408, -25.46749039, -25.44670288, -25.86062294, -26.30899817,
-26.57565791, -26.6866101, -27.03829228, -27.34621325, -27.91269122,
-28.60861612, -29.16745075, -28.81285096, -29.89737508, -30.26500716,
-30.08502411, -31.05084494, -31.21356991, -31.05715444, -32.29645243,
-32.76946492, -32.69307397)), .Names = c("datetime", "met"),
class = "data.frame", row.names = c(NA, -26L))
我已经尝试了下面的代码,但我无法让它按照我想要的方式工作。
> data$datetime <- as.POSIXct(data$datetime, format="%m/%d/%Y %H:%M")
> groups <- cut(data$datetime, breaks="5 min")
> by(data$met, groups, mean)
groups: 2013-07-11 19:20:00
[1] -24.58624
------------------------------------------------------------------------
groups: 2013-07-11 19:25:00
[1] -25.93189
------------------------------------------------------------------------
groups: 2013-07-11 19:30:00
[1] -27.51848
------------------------------------------------------------------------
groups: 2013-07-11 19:35:00
[1] -29.64554
------------------------------------------------------------------------
groups: 2013-07-11 19:40:00
[1] -31.6775
------------------------------------------------------------------------
groups: 2013-07-11 19:45:00
[1] -32.69307
这些是正确的平均值,但时间戳是 5 分钟期间的第一个时间戳,而不是最后一个时间戳,因此 R 给出的 12:01 实际上是 12:05(从 12:01 到 12:05 的时间段)。不幸的是,我似乎无法将输出转换为12/07/2013 12:05 -19.91691
.