直到R中的循环

时间:2013-04-05 11:09:48

标签: r

在我的智慧结束时,很抱歉这是错误的地方,或做错了。第一次问这里。我是R的新手,只有极少的编程经验(大学里的pascal课程,并且非常擅长宏观媒体术语 - 所以,不要害怕代码)。

为了简单而简单,我认为最好只是告诉你我拥有什么,以及我想要什么。我花了几个小时搜索并尝试解决方案。

我所拥有的一个例子(它是一个名为“signals”的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 }
}
谢谢你!

编辑 - 我遗漏了一个重要的资格赛。有些时候,“关闭”中的第一个真实陈述将出现在“开放”中的第一个真实陈述之前。但是,既然我在这里写了这篇文章,我认为以某种方式“关闭”关闭列更容易,所以在开放列中第一个1点之前没有1。

然而,如果有人知道如何做到这一切,请随时添加其他信息。谢谢!

1 个答案:

答案 0 :(得分:7)

您不必为此使用循环:

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不会增加。