Функция R «Все» не работает в цикле for

#r #for-loop

Вопрос:

Я пытаюсь отметить каждую строку в своем наборе данных, когда эта строка И ВСЕ следующие 5 строк превышают определенное значение (2 стандартных отклонения выше среднего). Это код, который я использую:

 for (row in 1:nrow(linnaeus)){
    if (all((linnaeus$delta[row:row 5]) > ((linnaeus$mean_delta[row])  ((linnaeus$sd_delta[row])*2)))
    ){
(linnaeus$start[row] <- 1)
}}
 

введите описание изображения здесь

Однако, как вы можете видеть на картинке. Теперь он будет отмечать строку (синим цветом), когда строка, расположенная на 5 строк ниже, будет достаточно высокой (красной). Если я напечатаю код специально для этих строк, вывод будет ЛОЖНЫМ. Однако в этом цикле for это, похоже, не работает. Для ясности я хочу, чтобы была отмечена только строка, когда она и ВСЕ следующие 5 строк превышают среднее значение более чем на 2 SDs.

Комментарии:

1. row:row 5 эквивалентно row 5 . Например, см. 1:1 5 Я думаю, тебе нужно row:(row 5) .

2. Однако это все равно не удастся, но по-другому. Когда вы дойдете до 4 строк снизу, то row:(row 5) превысите длину индекса. Возможно, вам, вероятно, нужна функция окна zoo::rollapply(seq_len(nrow(linnaeus)), 6, function(z) all(linnaeus$delta[z] > linnaeus$mean_delta[z[1]] 2*linnaeus$sd_delta[z[1]]), align="left", partial=TRUE) .