Hatena::ブログ(Diary)

盆栽日記

2015-10-16

10分単位でgroup_byして集計したい

分を抽出して10分単位でfloorして、1時間単位でfloorしたデータと足し合わせる。

たまにしかやらないので忘れてしまう。

というか以下の記事でも言及しているようにxtsパッケージとか使えばもっとスマートに書けるんじゃないのか。

http://notchained.hatenablog.com/entry/2015/09/22/072820

library("dplyr")
library("lubridate")
res <- df %>% group_by(m=floor_date(time, unit = "hour") + minutes(floor(minute(time) / 10) * 10)) %>% 
  summarise(count=sum(hoge))

あと、ミリ秒が入っていたときの書式もよく忘れる。

%Sの代わりに%OSを使えばよい。

as.POSIXctを使えばこんなこと気にしなくても良いのだが、いかんせん遅い。

lubridateパッケージのfast_strptimeは速いが書式とタイムゾーンを指定する必要がある。

タイムゾーン指定するときは+09を末尾につけて、書式で%zを指定しておくこと。

df$time <- lubridate::fast_strptime(paste0(df$StartDate,df$StartTime,"+09"), format="%Y-%m-%d%H:%M:%OS%z", tz="Asia/Tokyo")

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/dichika/20151016/p1