嗨,所有 R 效率专家(以及对我有类似问题的人),
这是一个效率问题。我有一些非常大的数据集。一个 data.frame 包含来自一台仪器的数据,该仪器具有 POSIX 日期和时间,其值的频率非常高。另一个 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)
有没有人建议更有效,更快的方法?