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

R语言如何根据threshold阈值变化对dataframe执行指定差值计算

R 阈值分段差值计算实现

你可以通过连续阈值分组+分组匹配计算的方式实现需求,以下是完整可运行代码:

步骤1:构造示例数据

time <- c(1,2,3,4,5,6,7,8,9,10,11,12)
threshold <- c(1,1,1,0,0,2,2,1,1,2,2,0)
value <- c(5,3,2,4,6,9,1,10,3,5,2,4)
df <- data.frame(time, threshold, value)

步骤2:加载依赖包并执行计算

仅需dplyr即可完成,无需引入其他额外依赖:

library(dplyr)

df_result <- df %>%
  # 给连续相同的threshold段分配唯一组号
  mutate(seg_id = cumsum(threshold != lag(threshold, default = first(threshold)))) %>%
  # 按组计算每组的阈值类型、组首value、组结束行号
  group_by(seg_id) %>%
  mutate(
    seg_threshold = first(threshold),
    seg_first_value = first(value),
    seg_end_row = cur_group_rows()[n()]
  ) %>%
  ungroup() %>%
  # 按规则计算结果列
  mutate(
    result = case_when(
      # 判断当前行是否为上一个阈值段的切换位置
      lag(seg_end_row) == row_number() ~ case_when(
        lag(seg_threshold) == 1 ~ lag(seg_first_value) - value,
        lag(seg_threshold) == 2 ~ value - lag(seg_first_value),
        TRUE ~ NA_real_
      ),
      TRUE ~ NA_real_
    )
  ) %>%
  # 移除辅助计算列
  select(-c(seg_id, seg_threshold, seg_first_value, seg_end_row))

输出结果

运行后得到的df_result如下:

timethresholdvalueresult
115NA
213NA
312NA
4041
506NA
629NA
721NA
81101
913NA
10255
1122NA
1204-1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:36:05