У меня есть ряд наблюдений за животными, связанных с временем суток. Мне нужно сгруппировать их следующим образом для последовательного анализа; все наблюдения, которые находятся на расстоянии менее 10 минут от предыдущего, относятся к одной группе. Когда наблюдение находится на расстоянии более десяти минут от предыдущего, оно начинает новую группу.
Для этого я сделал цикл for с оператором if
wilde16 <- structure(list(Species = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "wildebeest", class = "factor"),
Total_Ind = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), DateTime = structure(c(1464449354, 1464449370,
1464449393, 1464449402, 1464449876, 1464449954, 1464450303,
1464450624, 1464450640, 1464450656, 1464450953, 1464450969,
1464450985, 1464451132, 1464451148, 1464451165), class = c("POSIXct",
"POSIXt"), tzone = "Africa/Dar_es_Salaam")), row.names = c(99L,
100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 110L, 128L, 129L,
132L, 142L, 144L, 146L), class = "data.frame")
class(wilde16$DateTime)
[1] "POSIXct" "POSIXt"
wilde16$DateTime[223]
[1] "2016-05-30 09:54:54 EAT"
z <- 0
for(i in 1:length(wilde16$DateTime)){
if(wilde16$DateTime[i+1]-wilde16$DateTime[i]<600){
wilde16$Group[i] <- z
}
else{
z <- z + 1
wilde16$Group[i] <- z
}
}
Тем не менее, когда я запускаю, он возвращает сообщение об ошибке
"Ошибка в if (wilde16 $ DateTime [i + 1] - wilde16 $ DateTime [i] <600) {:
пропущенное значение, где требуется ИСТИНА / ЛОЖЬ "</p>
Даже если я попробую строки
i <- 1
(wilde16$DateTime[i + 1] - wilde16$DateTime[i] < 600)
возвращает
[1] FALSE
Что не так?