2016-04-14 165 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