我在 r 中有一个数据框
No. value time
1 2 12
2 4 23
3 6 13
4 8 8
5 10 13
6 12 24
我想要的数据框是
No. value time flag
1 2 12 0 NA
2 4 23 0 (4 >= 12)
3 6 13 0 (6 >= 23,12)
4 8 8 0 (8 >= 13,23,12)
5 10 13 1 (10 >= 8,13,23,12) Satisfied
6 12 24 1 (12 >= 13,23,12) Satisfied
7 14 23 1
我想检查当前值是否大于或等于时间列之前的所有行,如果条件满足,则会将标志设置为 1。
df$flag <- ifelse(df$value >= lag(df$time),1,0)
但是,这给了我最后一个值来比较并非所有前 n 行。
我怎样才能在 r 中做到这一点?
你的输出没有意义,因为在我的书中 10 仍然小于 23。但是为了论证,让我们将它们转化为向量:
set.seed(100)
x <- seq(2,20, by = 2)
y <- sample(4:13)
然后你可以使用轻松地做你想做的事cummax
像这样:
x >= cummax(y)
结果:
> x >= cummax(y)
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
> x
[1] 2 4 6 8 10 12 14 16 18 20
> y
[1] 7 6 8 4 12 9 13 5 11 10
编辑:在意识到你问的问题与你实际想要的完全不同之后,d.b 的这个解决方案将是获得你需要的解决方案:
c(NA, x[-1] >= cummin(head(y, -1)))
# [1] NA FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)