Образец данных, которые у меня есть.
hour <- c(rep(0,5), rep(1,5),rep(0,5), rep(1,5)) rain <- c(rep(0.1,10),rep(0.0,10)) df1<-data.frame(rain,hour) df1$csum <- with(df1, ave(df1$hour, cumsum(df1$hour == 0), FUN = cumsum))
логический на основе строк ниже и выше в другом векторе
Шаги:
1. Найти значения 1 в 'CSUM' (шестому/16).
2. Посмотрите на значения 3 строки вверх и 5 вниз в «дождь» (1: 9/11: 19 в этом случае), вокруг позиции, определяемой 1-м шагом в var 'csum',
3. если их сумма равна > = 0,1; чем первые три значения 1 в var 'час' (6: 8) преобразуются в 0, во втором случае они остаются неизменными, поскольку сумма равна 0.
Ожидаемый результат: Первые три значения 1 в df1 $ часов переключаются на 0
hour = c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1)
так что вы хотите, чтобы выполнить эти шаги только один раз? когда '1' происходит в первый раз. –
, если я правильно понял, просто ''() 'все достаточно и' if() ' –
точно. 1 на самом деле означает, что некоторые другие критерии были выполнены, а затем я смотрю в дождь в окне времени 8 часов; если не было значительного дождя (0,1 или более), первые три часа (значения 1) не учитываются. –