【发布时间】:2020-05-24 20:56:13
【问题描述】:
我有数据框,我想有两个新列 nmaxa 和 nmina 显示列 a 最多多少天,另一列显示列 a 最少多少天。如果它不是最大值或最小值,则天数将为 0。最大值或最小值的回溯天数可能非常大。我试图在 R 中找到一个回溯函数来做到这一点,但我找不到。
set.seed(123)
days = 1:100
a = runif(100, 1, 100)
df <- data.frame(days,a)
head(df)
tail(df)
示例:
如果列 a 的值大于前 2 天但小于前 3 天,则返回值为 2。
如果列 a 的值小于前 3 天但大于前 4 天,则返回值为 3。
这是一个具体示例,但我需要它回溯到不再满足最大或最小条件(执行 while 条件循环)并返回最大值和最小值的天数。
我将不胜感激。
【问题讨论】:
-
谢谢。我已经编辑了这篇文章,以更清楚地说明我需要做什么。这是一个玩具示例,但最小值和最大值的可变回溯期可能非常大
-
你能检查一下这个逻辑
head(df) %>% mutate(a1 = lag(a, default = first(a)), a2 = lag(a, 2, default = first(a)), new = a > a1 & a > a2 & a < lag(a, 3, default = first(a))) -
或者它是
rollapply的滚动函数 -
示例中是否需要b列?
-
对于上述具体示例,这是一个非常优雅的解决方案,但我需要它回溯到不再满足最大或最小条件。
标签: r