2016-04-14 164 views
0

虽然试图在大型数据框中实现嵌套for循环,但我意识到嵌套的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)}} 

我期望,并希望嵌套的循环增加SignalBinary矢量的df,数据框具有以下值: “1 1 1 1 1 1 1 1 1 1 NA NA NA NA NA NA NA NA NA NA”

  • 上前10行的“1”,因为1216的存在为每个在下面
  • “NA”的10行中的至少一个上下面10,因为对于那些i循环的向量长度的外侧延伸

而是,df $ SignalBinary变为 “0 0 0 1 0 0 0 0 0 0不适用不适用不适用不适用不适用不适用”

不明白。为什么只注册一个1216?非常感谢你!

+0

是什么你的第一条线?还有,你是什么意思*,因为1216以下每10行中至少有一行存在*?下面是什么?你的意思是如果1216行在11-20行吗? –

+0

猜测第一行不必要。在行02-11中至少存在一次用于在行1中记录1,在行中至少存在一次03-12,用于在行2中记录1 ...并且在行11-20中至少记录一次以记录1第10行。谢谢。 – Krug

回答

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)); 
     } 
+0

我很谦虚。谢谢! – Krug