R-фильтрация временных рядов
у меня есть временной ряд
mainTimeSeries <- data.frame(time=seq(as.POSIXct("2012/1/1"), as.POSIXct("2012/1/5"), "hour"), value=sample(1:10, 1))
Я хочу, чтобы отфильтровать все данные, которые присутствуют в другой серии
badTimeSeries<-data.frame(startTime=seq(as.POSIXct("2012/1/3"), as.POSIXct("2012/1/4"), "hour"))
badTimeSeries$endTime <- badTimeSeries$startTime + 1800
существует ли функция фильтрации дат ? Результаты должны быть такими, чтобы ни один элемент mainTimeSeries не находился между временем начала и временем окончания badTimeSeries.
1 ответов
lubridate
- это полезно. Без него вам нужно написать свои собственные чеки на перекрытия, что является своего рода болью...
library(lubridate)
badRange <- as.interval(days(1), as.POSIXct("2012/1/3"))
> mainTimeSeries %within% badRange
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[22] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[43] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[64] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>
или:
> mainTimeSeries[mainTimeSeries %within% badRange]
[1] "2012-01-03 00:00:00 PST" "2012-01-03 01:00:00 PST" "2012-01-03 02:00:00 PST" "2012-01-03 03:00:00 PST"
[5] "2012-01-03 04:00:00 PST" "2012-01-03 05:00:00 PST" "2012-01-03 06:00:00 PST" "2012-01-03 07:00:00 PST"
[9] "2012-01-03 08:00:00 PST" "2012-01-03 09:00:00 PST" "2012-01-03 10:00:00 PST" "2012-01-03 11:00:00 PST"
[13] "2012-01-03 12:00:00 PST" "2012-01-03 13:00:00 PST" "2012-01-03 14:00:00 PST" "2012-01-03 15:00:00 PST"
[17] "2012-01-03 16:00:00 PST" "2012-01-03 17:00:00 PST" "2012-01-03 18:00:00 PST" "2012-01-03 19:00:00 PST"
[21] "2012-01-03 20:00:00 PST" "2012-01-03 21:00:00 PST" "2012-01-03 22:00:00 PST" "2012-01-03 23:00:00 PST"
[25] "2012-01-04 00:00:00 PST"
>
использование только базы R:
bad_start <- as.POSIXct('2012/1/3')
bad_end <- as.POSIXct('2012/1/4')
mainTimeSeries[mainTimeSeries > bad_end | mainTimeSeries < bad_start]