第2のデータセットの「イベント」として定義された間隔に基づいて、時系列データセットの多くのパラメータの手段を頻繁に計算する必要があります。効率的なdplyrは別のデータフレーム内の間隔に基づいて1つのデータフレームで要約する
以下のサンプルコードは、私の現在のアプローチを示しています。これはうまく動作します。
私のデータセットが増えていくので、もっと効率的な方法があるかどうか疑問に思っています。
dplyr/tidyverseの範囲内にとどまることが重要です(data.tableの方法は高く評価されますが、実際は役に立ちません)。
library(tidyverse)
#generate time series data
data <- bind_cols(
data_frame(td=seq(from = as.POSIXct("2010-01-01 00:00"),
to = as.POSIXct("2010-12-31 23:59"),
by = 60)),
as_data_frame(replicate(20,runif(525600))))
#generate events
events <- data_frame(
event = as.character(1:669),
start_cet = seq(from = as.POSIXct("2010-01-01 00:00"),
to = as.POSIXct("2010-12-01 00:00"),
by = 43200),
stop_cet = seq(from = as.POSIXct("2010-01-01 02:00"),
to = as.POSIXct("2010-12-01 02:00"),
by = 43200)
)
#calculate means of data columns within event intervals
system.time(
means <- events %>%
rowwise() %>%
mutate(s = list(data %>% select(td) %>% filter(td >= start_cet & td < stop_cet))) %>%
unnest() %>%
select(event,td) %>%
left_join(.,data) %>%
group_by(event) %>%
summarise_at(vars(V1:V20),funs(mean=mean)) %>%
ungroup()
)
は、あなたのためにパッケージXYZ内にありますか? – eddi
FWIW、 'mutate'ステップでほとんどすべての関数時間が消費されているようです。 –
**は**あなたの例では瞬時に実行されるはるかに効率的な方法ですが、あなたの任意の制約内にとどまることはありません。あなたは、シャベルの代わりにハンマーを使って穴を掘りたい。それで幸運。 – eddi