繁体   English   中英

R-基于对其他行中的值的引用的条件计算

[英]R- Conditional calculation based on reference to values in other row

我想在另一行的同一列中引用一个值。 我有一栏有开始和停止时刻。 我想添加一个列,指示机器是否正在运行。

这是数据的样子:

c("", "", "start", "", "", "stop", "", "", "start", "stop", "")

输出应如下所示:

 [1,] ""      ""       
 [2,] ""      ""       
 [3,] "start" "running"
 [4,] ""      "running"
 [5,] ""      "running"
 [6,] "stop"  "running"
 [7,] ""      ""       
 [8,] ""      ""       
 [9,] "start" "running"
[10,] "stop"  "running"
[11,] ""      ""      

在第二栏中我想做:

  • 如果同一行第一列等于开始 - >运行
  • 如果前一行第一列等于停止 - >“”
  • ELSE与第二列的前一行的值相同

我怎么能用R优雅地做到这一点?

非常感谢您提前输入!

您可以使用cumsum来检查是否存在比“stop”值更多的“start”值以了解进程是否正在运行:

res <- cbind(myvec, c("", "running")[(cumsum(myvec=="start") > cumsum(myvec=="stop")) + 1])

之后可以为“停止”的行添加“运行”:

res[res[, 1]=="stop", 2] <- "running"

res
#      myvec            
# [1,] ""      ""       
# [2,] ""      ""       
# [3,] "start" "running"
# [4,] ""      "running"
# [5,] ""      "running"
# [6,] "stop"  "running"
# [7,] ""      ""       
# [8,] ""      ""       
# [9,] "start" "running"
#[10,] "stop"  "running"
#[11,] ""      "" 

数据

myvec <- c("", "", "start", "", "", "stop", "", "", "start", "stop", "")

我相信这不是最优雅的方式,但不知怎的,我觉得它给你想要的东西。 您可以使用for-loop

x <- c("", "", "start", "", "", "stop", "", "", "start", "stop", "")
flag <- 0
y <- array()

for(i in 1:length(x))
{
  if(flag == 0 & x[i] == "")
  y[i] <- ""
  else if(x[i] == "start" | x[i] == "")
  {
   flag = 1;
   y[i] <- "running"
  } 
  else if(x[i] == "stop")
  {
   y[i] <- "running"
   flag <- 0
  }
}

OUTPUT

y
#[1] ""        ""        "running" "running" "running" "running" ""        ""        "running"
#[10] "running" "" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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