如何计算另一数据帧中间隔的平均曝光



我需要计算数据集大于0的间隔的平均曝光。我已经使用pracma::findpeaks()函数找到了峰值,并在数据集中获得了这些信息。现在我想得到这些间隔的平均曝光,但是我不知道怎么做。

数据的一个例子是:

time_initial <- seq(from = as.POSIXct("08:19:00", "%H:%M:%S", tz="UTC"), to = as.POSIXct("08:19:59", "%H:%M:%S", tz="UTC"), by = "1 sec")
time_min <- format(as.POSIXct(time_initial), format = '%H:%M:%S')
exposure <- c(0,0,2,3,5,0,0,4,5,6,0,0,0,0,0,0,4,5,0,0)
data <- as.data.frame(cbind(time_min, exposure))

峰值信息的一个例子是:

data$exposure <- as.numeric(data$exposure)
peak <- findpeaks(data$exposure, nups = 0, ndowns = 0, minpeakheight = 1, sortstr = FALSE, threshold = 1, npeaks = 3)
peak_info <- data.frame(
peak_number = 1:nrow(peak),
time_peak_max = data[peak[,2],"time_min"],
peak_heigth = data[peak[,2],"exposure"],
peak_start = data[peak[,3],"time_min"],
peak_end = data[peak[,4],"time_min"])

我想从peak_startpeak_end(来自数据集data)之间的间隔中获得曝光的平均值。

多谢

一个选项是使用as.ITime将时间列转换为ITime类,然后与data.table进行非相等连接

library(data.table)
setDT(data)[, time_min := as.ITime(time_min)]
setDT(peak_info)[, c("peak_start", "peak_end") := lapply(.SD, as.ITime), 
.SDcols = c("peak_start", "peak_end")]
data[peak_info, .(MeanExposure = mean(exposure, na.rm = TRUE)),
on = .(time_min >= peak_start, time_min <= peak_end), by = .EACHI]

与产出

time_min time_min MeanExposure
<ITime>  <ITime>        <num>
1: 08:19:01 08:19:05         2.00
2: 08:19:06 08:19:10         3.00
3: 08:19:15 08:19:18         2.25

最新更新