У меня есть фрейм данных с временным рядом, который выглядит следующим образом:
df<-structure(list(date = structure(c(-6905, -6891, -6853, -6588,
-6588, -6586, -6523, -6515, -5856, -5753), class = "Date"), flow = c(2.22,
2.56, 3.3, 1.38, 4, 1.4, 1.32, 1.26, 6, 35.69)), .Names = c("date",
"flow"), row.names = c(NA, 10L), class = "data.frame")
Я хочу удалить все строки, которые не являются максимальными, в течение 2 дней вперед или назад от его даты.Таким образом, в случае выше, строки 4 и 6 будут удалены.Я не смог найти похожие ответы на вопросы.
Я написал этот код, который не работает, он уродлив, длинен и не заботится о границах кадра данных:
idx <- c()
for (j in 3:(length(df$date)-2)){
if (as.Date(df$date[j+2])-as.Date(df$date[j])<3 |
as.Date(df$date[j])-as.Date(df$date[j-2])<3){
if (df$flow[j]!=max(df$flow[(j-2):(j+2)])){
idx <- c(idx,j)
}
} else if (as.Date(df$date[j+1])-as.Date(df$date[j])<3 |
as.Date(df$date[j])-as.Date(df$date[j-1])<3){
if (df$flow[j]!=max(df$flow[(j-1):(j+1)])){
idx <- c(idx,j)
}
}
}
Обратите внимание, что даты в кадре данных не являются последовательными.