2017-07-07 3 views
1

イントロdplyr使用して「良い」休憩と時間によってデータフレームのグループ化:

を私は10分のデータにいくつかの5分のデータを集計したいと思います。具体的には、10分のマーク(00:10:00、00:20:00、00:30:00など)に集約したいだけです。

以下のコードはほぼ達成されていますが、ブレークは10分のマーク(00:05:00、00:15:00、00:25:00)ではなく5分のマークです。私は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