使用 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
简介:
我想将一些 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