如何将当前行与r中的所有先前行进行比较

时间:2017-07-15 15:13:29

标签: 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?

2 个答案:

答案 0 :(得分:2)

你的输出没有意义,因为在我的书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

答案 1 :(得分:1)

array

数据

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