R - 过滤时间序列

标签 r time-series

我有一个时间序列

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 的 startTime 和 endTime 之间。

最佳答案

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]

关于R - 过滤时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059123/

相关文章:

time-series - 在 MATLAB 中将数据拟合到 B 样条

python - 在 Python 中对选定的日期数据进行子集化

r - 为什么 R 没有按正确的顺序对我的 tibble 进行排序?

r - 最近邻图中第 k 个邻居的奇怪距离

r - 如何将数字列转换为 R 中的因子

sql - R的滚动日期范围内的唯一值计数

r - 在 R 中绘制随时间变化的概率密度热图

r - 使用 'symbols' 命令为气泡图创建图例

r - 如何使用公式中其他列的单个值计算新列?

python - Pandas:使用 Unix 纪元时间戳作为日期时间索引