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

如何在R语言中平滑变量并忽略阈值为5的小幅波动

问题:忽略阈值内的小幅变量变化(视为噪声)

我有一个变量,希望将阈值5以内的小幅变化视为测量误差或噪声并忽略。

示例数据

mydf = data.frame(time = 1:14,
                  variable=c(1,1,1,4,1,1,1,7,6,5,5,4,5,25))

尝试的平滑方法及问题

我尝试通过以下方法平滑这些小幅变化:

mydf %>%
  mutate(previous = lag(variable, n = 1, default = first(variable)),
         mytry = ifelse(abs(previous - variable) < 5, previous, variable)) 

运行结果:

time variable previous   mytry 
1     1        1        1       1
2     2        1        1       1
3     3        1        1       1
4     4        4        1       1  <- 从时间3到4出现小幅变化
5     5        1        4       4  <- 此处应同样为1
6     6        1        1       1
7     7        1        1       1
8     8        7        1       7  <- 首次大幅变化
9     9        6        7       7  <- 首次小幅变化被忽略
10   10        5        6       6  <- 二次小幅变化再次出现
11   11        5        5       5
12   12        4        5       5
13   13        5        4       4
14   14       25        5      25

上述方法能正确识别并忽略首次小幅变化,但后续出现的二次小幅变化仍会保留在平滑后的变量中。我认为最佳方案是将每次大幅变化设为新基准值,以此为基准忽略后续小幅变化。

理想结果

示例数据的理想结果如下:

time variable previous   mytry optimal5
1     1        1        1       1         1
2     2        1        1       1         1
3     3        1        1       1         1
4     4        4        1       1         1 
5     5        1        4       4         1  
6     6        1        1       1         1
7     7        1        1       1         1
8     8        7        1       7         7 
9     9        6        7       7         7 
10   10        5        6       6         7 
11   11        5        5       5         7
12   12        4        5       5         7
13   13        5        4       4         7
14   14       25        5      25         25

效果说明

变量平滑效果可视化:展示了首次小幅变化被忽略后的效果


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:43:15