【发布时间】:2021-07-29 06:38:41
【问题描述】:
如何创建满足两个条件的过滤器:
- 删除值下降到前一天 80% 以上的所有行。
- 继续删除下降后的行,直到值再次上升超过 50
data <- tibble(date = seq.Date(as.Date("2021-01-01"),as.Date("2021-01-01")+14,1),
value = c(89,86,87,76,10,90,92,83,12,15,23,51,32, 88, 92)
) %>%
mutate(diff = (value-lag(value, default = first(value)))/lag(value, default = first(value)))
最终输出应该是:
date value diff
<date> <dbl> <dbl>
1 2021-01-01 89 0
2 2021-01-02 86 -0.0337
3 2021-01-03 87 0.0116
4 2021-01-04 76 -0.126
5 2021-01-06 90 8
6 2021-01-07 92 0.0222
7 2021-01-08 83 -0.0978
8 2021-01-12 51 1.22
9 2021-01-13 32 -0.373
10 2021-01-14 88 1.75
11 2021-01-15 92 0.0455
【问题讨论】:
-
这是一个不需要的列,我最终会在最终输出中删除
-
还有一件事!如果说连续值为 100、5(减少 95%)、10(增加 100%)、15(增加 50%)、16.5(增加 10%)、33(增加 200%),您的预期结果是什么。
-
只有 100 会保留,直到值再次超过 50,所以
c(100,5,10,15,16.5,33,51,40)的序列只有c(100, 51, 40) -
实际上,即使下面的答案有效,它也不能很好地概括,特别是如果你从小于 50 的值开始。我放弃了思考过程并使用了新的任务标准这需要在 shinyapp 中完成。我认为这可能是一个有缺陷的思考过程:)
-
再一次打扰你,(实际上我发现这个既有趣又具有挑战性)
A = c(102,100,50,60,20,100,5,10, 15,1,33,50,53)的理想输出是因为这里的值下降了两次,下降了 80% 并且只上升一次?
标签: r filter dplyr time-series