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

获取时间序列中符合条件的降温Bout长度及所有相关事件

识别符合条件的降温Bout并计算时长

咱们先明确要捕捉的降温事件核心规则:

  • 降温过程必须持续稳定无升温:整个降温阶段里,每个时间点的温度都不高于前一个时间点
  • 总降幅必须超过1个温度单位:降温起始温度和阶段最低温度的差值大于1
  • 降温结束后温度进入稳定状态:连续时间单位内的温度波动幅度不超过0.1

原始数据加载代码

首先加载你提供的时间序列数据:

Lines <- " time Temperature 
1 38.3 
2 38.5 
3 38.9 
4 38.6 
5 38.2 
6 38.0 
7 37.6 
8 37.2 
9 37.4 
10 37.6 
11 37.8 
12 38.1 
13 38.3 
14 38.4 
15 38.3 
16 38.3 
17 38.5 
18 38.9 
19 38.6 
20 38.2 
21 38.0 
22 38.1 
23 38.4 
24 38.6 
25 38.6 
26 38.2 
27 38.5 
28 38.3 
29 38.4 
30 38.3 
31 38.0 
32 38.1 
33 38.4 
34 38.6 
35 38.6 
36 38.2 
37 38.0 
38 37.7 
39 37.4 
40 38.0 
41 38.1 
42 38.1 " 
DF <- read.table(text = Lines, header = TRUE)

温度变化趋势

先直观看看温度随时间的波动情况:
温度变化时间序列图

实现代码与逻辑

接下来咱们用R一步步识别符合条件的降温Bout:

library(dplyr)

# 1. 计算温度变化量,标记降温状态(温度不升则视为降温阶段)
DF <- DF %>%
  mutate(temp_change = Temperature - lag(Temperature),
         is_cooling = ifelse(temp_change <= 0, 1, 0)) %>%
  replace_na(list(is_cooling = 0))  # 第一个时间点无前置数据,标记为非降温

# 2. 识别连续的降温片段,计算每个片段的核心指标
DF <- DF %>%
  mutate(cooling_segment = cumsum(is_cooling != lag(is_cooling, default = 0))) %>%
  group_by(cooling_segment) %>%
  mutate(is_cooling_segment = any(is_cooling == 1),
         segment_start_time = first(time),
         segment_min_temp = min(Temperature),
         segment_start_temp = first(Temperature),
         temp_drop = segment_start_temp - segment_min_temp) %>%
  ungroup()

# 3. 筛选出总降幅超过1的有效降温片段
valid_segments <- DF %>%
  filter(is_cooling_segment & temp_drop > 1) %>%
  distinct(cooling_segment, segment_start_time, segment_start_temp, segment_min_temp, temp_drop)

# 自定义函数:找到降温结束后首次进入稳定状态的时间点
find_stable_time <- function(end_cool_time, df) {
  post_cooling <- df %>% filter(time > end_cool_time)
  for(i in 2:nrow(post_cooling)) {
    if(abs(post_cooling$Temperature[i] - post_cooling$Temperature[i-1]) <= 0.1) {
      return(post_cooling$time[i])
    }
  }
  return(NA)  # 若未找到稳定点则返回NA
}

# 4. 计算每个有效降温Bout的时长
valid_segments <- valid_segments %>%
  rowwise() %>%
  mutate(segment_end_time = segment_start_time + nrow(filter(DF, cooling_segment == !!cooling_segment)) - 1,
         stable_end_time = find_stable_time(segment_end_time, DF),
         bout_duration = stable_end_time - segment_start_time) %>%
  ungroup()

# 输出最终结果
print(valid_segments)

结果说明

运行代码后会得到所有符合要求的降温Bout详情:

  • segment_start_time:降温开始的时间点
  • temp_drop:该片段的总温度降幅
  • stable_end_time:温度恢复稳定的时间点
  • bout_duration:降温Bout的总时长

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:43