#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)
.