简单嵌套for循环问题

时间:2016-04-14 22:11:53

标签: r for-loop nested-loops

在尝试在大型数据帧中实现嵌套for循环时,我意识到嵌套for循环不会产生我期望的结果。这是我的问题的摘录。

df <- data.frame(nrow = 20, ncol = 1)
df <- data.frame(  LastPrice = c( 1221, 1220, 1220, 1217, 1216,  1218 , 1216, 1216, 1217, 1220, 1219, 1218, 1220, 1216, 1217, 1218, 1218, 1207, 1206, 1205))
for(j in 1:20) {for (i in 1:10) {df$SignalBinary[j] <- ifelse (df$LastPrice[j+i] == 1216, 1, 0)}}

我希望并希望嵌套的for循环将SignalBinary向量添加到具有以下值的df数据帧:&#34; 1 1 1 1 1 1 1 1 1 1 NA NA NA NA NA NA NA NA NA&#34 ;

  • &#34; 1&#34;在前10行中,因为在下面10行中的至少一行中每个都存在1216
  • &#34; NA&#34;因为对于那些i循环延伸到向量长度之外

相反,df $ SignalBinary变为  &#34; 0 0 0 1 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA&#34;

不能得到它。为什么只注册一个1216?非常感谢你!

1 个答案:

答案 0 :(得分:1)

你忘记在第二个循环中总结,所以它只匹配最后一个我是2016年。试试这个:

for(j in 1:20) {
    tmp <- 0
    for (i in 1:10) 
        tmp <- tmp + ifelse(df$LastPrice[j+i] == 1216, 1, 0)
    df$SignalBinary[j] <- as.integer(tmp>0)
}

或没有临时变量:

df$SignalBinary[j] <- 0
for(j in 1:20) {
    for(i in 1:10) 
        df$SignalBinary[j] <- as.integer(df$SignalBinary[j] || ifelse (df$LastPrice[j+i] == 1216, 1, 0));
        }