こんにちは、すべての R 効率の専門家 (および私と同様の質問を持つ人々)。
これは効率の問題です。非常に大きなデータセットがあります。1 つの data.frame には、非常に高い頻度で値を持つ POSIX 日付と時刻を持つ 1 つの機器からのデータが含まれています。別の data.frame には、はるかに低いサンプリング周波数で日付と時刻の値の列を持つ別の機器からのデータが含まれています。
高頻度データ フレームの集計値を低頻度データ フレームの期間に割り当てたいと考えています。この関数は機能しますが、数百万のデータ ポイントがある場合は非常に遅くなります。
st <- strptime("22/09/2013 12:00:00", "%d/%m/%Y %H:%M:%S")
st.vec <- st + runif(10,0, 60*60*24)
en.vec <- st.vec + 10*60
tm.hfreq <- strptime("22/09/2013 12:00:00", "%d/%m/%Y %H:%M:%S") + runif(400,0, 60*60*24)
vals.hfreq <- runif(400,0, 12000)
intervalstats <- function(strt, fin, vals, tms){
mns <- NULL
mds <- NULL
sds <- NULL
for (i in seq(1,length(fin))){
mns <- append(mns,mean(vals[(tms > strt[i])&(tms < fin[i])]))
sds <- append(sds,sd(vals[(tms > strt[i])&(tms < fin[i])]))
mds <- append(mds,median(vals[(tms > strt[i])&(tms < fin[i])]))
}
res <- cbind(mns, sds, mds)
res
}
intervalstats(st.vec, en.vec, vals.hfreq, tm.hfreq)
より効率的で高速なアプローチについて提案がある人はいますか?