2017-07-07 27 views
1

介绍“好”游:一个分组数据框的时间用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}来实现“漂亮”的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 

回答

1

期间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 
+0

谢谢!这足以满足我需要做的事情。 – spacedSparking

相关问题