繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM