You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何计算另一dataframe中各峰值区间的平均exposure

计算峰值区间平均暴露值的实现方法

pracma::findpeaks()返回的结果矩阵中,第3列、第4列直接存储了每个峰值在原数据集的起始行索引、结束行索引,不需要额外做时间字符串匹配,直接按行范围切片计算均值即可,计算效率更高。

方法1:基于原生行索引计算(推荐,适合连续无缺失的等间隔时间序列)

直接遍历峰值结果矩阵,按行索引截取对应区间的exposure值计算均值,代码如下:

# 计算每个峰值区间的平均exposure
peak_info$avg_exposure <- apply(peak, 1, function(row) {
  start <- row[3]
  end <- row[4]
  mean(data$exposure[start:end])
})

方法2:基于时间区间匹配计算(适合手动调整过峰值区间、时间序列有缺失的场景)

如果你后续手动修改过peak_info里的起止时间,或者原时间序列存在缺失值,可以先把时间字段转为时间类型,再按时间范围匹配数据计算:

# 统一转换为POSIXct时间类型用于区间比较
data$time_pos <- as.POSIXct(data$time_min, format = "%H:%M:%S", tz = "UTC")
peak_info$start_pos <- as.POSIXct(peak_info$peak_start, format = "%H:%M:%S", tz = "UTC")
peak_info$end_pos <- as.POSIXct(peak_info$peak_end, format = "%H:%M:%S", tz = "UTC")

# 按时间区间匹配计算均值
peak_info$avg_exposure <- apply(peak_info, 1, function(p) {
  hit <- which(data$time_pos >= p[["start_pos"]] & data$time_pos <= p[["end_pos"]])
  mean(data$exposure[hit])
})

结果验证

用提供的示例数据运行上述代码,得到3个峰值区间的平均暴露值分别为:

  • 第一个峰值(08:19:02 ~ 08:19:04):均值约3.33
  • 第二个峰值(08:19:07 ~ 08:19:09):均值5
  • 第三个峰值(08:19:16 ~ 08:19:17):均值4.5
    和手动核算的结果完全一致。

内容的提问来源于stack exchange,提问作者Miquel Vallbona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:57:14