[英]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,] "" ""
在第二栏中我想做:
我怎么能用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.