2016-04-14 1 views
0

При попытке реализовать вложенные для циклов в большом фрейме данных я понял, что вложенные для циклов не производят ожидаемые результаты. Вот выдержка из моей проблемы.Простая проблема с вложенными циклами

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 вектора ДФ dataframe со следующими значениями: "1 1 1 1 1 1 1 1 1 1 NA NA NA NA NA NA NA NA NA NA"

  • «1» на первых 10 строк, потому что 1216 присутствует для каждого, по меньшей мере, один из 10 строк ниже
  • «NA» на следующие 10, потому что для тех, петля я выходит за пределы длины вектора

Вместо этого, df $ SignalBinary становится «0 0 0 1 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA«

Не получите его. Почему он регистрирует только один 1216? Большое спасибо!

+0

Что такое ваша первая линия? А также, что вы подразумеваете под *, потому что 1216 присутствует для каждого, по крайней мере, в одном из 10 строк ниже *? Ниже, что? Вы имеете в виду, если 1216 присутствует в строках 11-20? –

+0

Угадай первая линия не необходимо. Представляет собой по меньшей мере один раз в строках 02-11 для записи 1 в строке 1, по меньшей мере один раз в строки 03-12 для записи 1 в строке 2 ... и по меньшей мере один раз в строки 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) 
} 

Или без переменной TEMP:

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