Вот два возможных однострочных. Возможно, не так просто, как хотелось бы, но они короткие, а второй - минус.
1) findInterval зоопарк индексы могут быть логичными так что этот код работает, используя логическое условие с findInterval
, где z
является вход POSIXct серии зоопарка., st
является POSIXct вектора начинается и en
является соответствующей POSIXct вектором концов. Приведенный ниже код формирует c(st[1], en[1] + .001, st[2], en[2] + .001, ...)
так, чтобы четные интервалы отображали диапазоны, которые нужно сохранить и нечетные, чтобы исключить. Это предполагает, что интервалы упорядочены и неперекрываются так, что st[1] < en[1] < st[2] < en[2] < ...
Это похоже на вопрос в вопросе.
z[ findInterval(index(z), c(rbind(st, en + .001))) %% 2 == 0 ]
Обратите внимание, что если длина st
и en
каждый равен 1, то это упрощает для:
z[ findInterval(index(z), c(st, en + .001)) != 1 ]
2) матч Если st
и en
значения относятся к числу index(z)
значений мы могли бы попеременно использование match
. например, это было бы в случае начала и конца, указанных в вопросе, если z
были часовыми рядами. Это использует тот факт, что z[-(3:4)]
работает, чтобы исключить элементы 3 и 4, скажем, из серии зоопарков z
. Приведенный ниже код преобразует значения POSIXct в индексы среди 1, 2, 3, ..., length (z) и исключает использование минус.
z[ - unlist(Map(seq, match(st, index(z)), match(en, index(z)))) ]
Обратите внимание, что если длина st
и en
каждый равен 1, то это упрощает просто:
z[ - seq(match(st, index(z)), match(en, index(z)) ]
Пример (2)
Например, попробовать с ними входы:
library(zoo)
tt <- seq(as.POSIXct("2011-01-01 00:00:00"), as.POSIXct("2011-01-04 23:00:00"), by="hour")
z <- zoo(seq_along(tt), tt)
st <- as.POSIXct(c("2011-01-02 13:00:00", "2011-01-04 15:00:00"))
en <- as.POSIXct(c("2011-01-02 14:00:00", "2011-01-04 17:00:00"))
Теперь мы можем запустить это.
z0 <- z[ - unlist(Map(seq, match(st, index(z)), match(en, index(z)))) ]
plot(z0, type = "p", pch = 20)
Обратите внимание на две исключенные области на графике ниже.
Можете ли вы предоставить небольшой пример (гипотетические данные)? –
См. [Mcve], как обеспечить воспроизводимый пример. В этом случае я дал один ответ. –
Большое спасибо @ G.Grothendieck, я посмотрю и буду следовать инструкциям в будущем. –