[英]how to compare a current row with all previous rows in r
我在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
轻松做你想做的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
编辑:在意识到你问了一些与你真正想要的完全不同的东西之后,这个db的解决方案将是获得你需要的解决方案:
c(NA, x[-1] >= cummin(head(y, -1)))
# [1] NA FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
as.numeric(c(FALSE, sapply(2:length(df$value), function(i)
any(df$value[i] >= df$time[1:(i-1)]))))
#[1] 0 0 0 0 1 1 1
数据
df = structure(list(No. = c(1, 2, 3, 4, 5, 6, 7), value = c(2, 4,
6, 8, 10, 12, 14), time = c(12, 23, 13, 8, 13, 24, 23)), .Names = c("No.",
"value", "time"), row.names = c(NA, 7L), class = "data.frame")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.