使用 dplyr 使用 "nice" 按时间对数据帧进行分组

Grouping a dataframe by time with "nice" breaks using dplyr

简介:

我想将一些 5 分钟的数据聚合成 10 分钟的数据。具体来说,我只想汇总 10 分钟标记(00:10:00、00:20:00、00:30:00 等)。

下面的代码几乎实现了这一点,但中断是在 5 分钟标记而不是 10 分钟标记(00:05:00,00:15:00,00:25:00)。我认为 dplyr 在确定切点时使用数据框中的第一行。

是否有任何方法可以使用 cut {base}group_by() {dplyr} 实现 "nice" 10 分钟休息?我可以只删除第一行数据,但我确实需要解决方案来管理许多不同的文件,每个文件都有独特的起点。

提前致谢!

示例代码:

date <- c("2017-06-14 14:35:00", "2017-06-14 14:40:00", "2017-06-14 14:45:00", "2017-06-14 14:50:00")
co <- as.numeric(c(5.17,10.07,13.88,13.78))
no <- as.numeric(c(34.98,32.45,31.34,29.09))
no2 <- as.numeric(c(0.00,0.00,0.00,0.00))
o3 <- as.numeric(c(5.17,10.07,13.88,13.78))

data <- data.frame(date, co, no , no2, o3)
data$date <- strptime(data$date, format = "%Y-%m-%d %H:%M")
data$date <- as.POSIXct(data$date)

head(data)

data_10min <- data %>% 
      group_by(date = cut(date, breaks = "10 min")) %>%
      summarize(co = mean(co), no = mean(no), no2 = mean(no2), o3 = mean(o3))

head(data_10min)

期望输出:

2017-06-14 14:40:00
2017-06-14 14:50:00

只需在 group_by 期间向日期列添加 300 秒即可获得所需的结果。

library(magrittr)
library(dplyr)

df_10min <- df %>% 
  group_by(date = cut(as.POSIXct(x) + 300, breaks = "10 min")) %>%
  summarize_each(funs(mean))

df_10min

结果:

# # A tibble: 2 × 5
# date    co     no   no2    o3
# <fctr> <dbl>  <dbl> <dbl> <dbl>
# 1 2017-06-14 14:40:00  7.62 33.715     0  7.62
# 2 2017-06-14 14:50:00 13.83 30.215     0 13.83