r - 在 R 中执行直到循环

标签 r

在我的智慧结束时,很抱歉这是错误的地方,或者做错了。第一次在这里问。我是 R 的新手,几乎没有编程经验(大学里的 pascal 类(class),并且非常擅长使用宏媒体行话——所以,不怕代码)。

为了让事情简短而简单,我认为最好只向您展示我拥有的以及我想要的。我花了几个小时来搜索和尝试解决方案。

我所拥有的示例(它是一个名为“信号”的 xts 对象,并按天索引(此处省略以简化示例):

open  close position
0     0     0
1     0     0
0     0     0
0     0     0
0     1     0
0     0     0

以及我想发生的事情:
open  close position
0     0     0
1     0     1
0     0     1
0     0     1
0     1     1
0     0     0

基本上,当“打开”为真时,在“位置”重复 1 直到“关闭”为真。我认为非常简单,但不知何故我无法让它工作。这是我得到的一个例子,我认为可能很接近,但它陷入了无限循环:
for (i in 1:nrow(signals)) {
  if (signals[i,"open"]==1) next
  while (signals[i,"close"] == 0) {
    signals[i,"position"] <- 1 }
}

谢谢你!

编辑 - 我遗漏了一个重要的限定词。有时,“close”中的第一个真语句会出现在“open”中的第一个真语句之前。但是,既然我在这里写了这些,我想以某种方式“清理”关闭列会更容易,因此在打开列中的第一个 1 点之前,其中没有 1。

但是,如果有人知道如何完成所有操作,请随时添加其他信息。谢谢!

最佳答案

您不必为此使用循环:

open <- c(0,1,0,0,0,0)
close <- c(0,0,0,0,1,0)
position <- cumsum(open-close)
position
[1] 0 1 1 1 0 0

请注意,这会立即关闭,如果您想在收到关闭信号后上线,请使用:
cumsum(open-c(0,close[-length(close)]))
[1] 0 1 1 1 1 0

你的原因while声明永无止境的是,您无需修改​​正在测试的内容,即 i不会增加。

关于r - 在 R 中执行直到循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832389/

相关文章:

r - ddply 总结比例计数

r - 如何使用带有ddply或聚合返回向量(如Fivenum)的函数?

r - 在 R 中传递缺少的参数

r - 用 dplyr 大写

r - 插入符号 : combine the stratified createMultiFolds (repeatedCV) and groupKFold

r - 基础 R 中缺失值的面积图

r - 矩阵求逆

r - 在 R 中使用 dplyr::if_else() 根据另一个变量的值更改 POSIXct 时间戳的时区

r - 使用 R 提取每个回归系数的 p 值列表(1104 个线性回归)

r - 如何清除OS X(或Ubuntu)中的R控制台