我有一个变量,我想忽略它的微小变化,直到阈值5,因为我将它们解释为测量误差或噪声.
我的最小数据是:
mydf = data.frame(time = 1:14,
variable=c(1,1,1,4,1,1,1,7,6,5,5,4,5,25))
我try 使用以下方法来消除这些小变化:
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 <- from time 3 to 4 a small change happened
5 5 1 4 4 <- this should also be 1
6 6 1 1 1
7 7 1 1 1
8 8 7 1 7 <- initial big change
9 9 6 7 7 <- first small change ignored
10 10 5 6 6 <- second small change comes back in
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
下面的可视化显示了最初的小更改如何被忽略.