从数据框中提取连续测量值

时间:2016-03-01 19:11:12

标签: r subset

我想将包含测量时间序列的数据帧与相应的POSIXct时间戳进行子集化。这是一个示例数据框:

ExampleData<-data.frame(as.POSIXct(c(1:500, 4845:4860, 61000:62000,
155470 )+1456858328, origin="1970-01-01" ), runif(1518))

其中有四个连续测量:

From 2016-03-01 19:52:09 to 2016-03-01 20:00:28  (500 seconds)
From 2016-03-01 21:12:53 to 2016-03-01 21:13:08  (15 seconds)
From 2016-03-02 12:48:48 to 2016-03-02 13:05:28  (1000 seconds)
From 2016-03-03 15:03:18 to 2016-03-03 15:03:18  (1 seconds)

我想要的是提取超过60秒的所有连续测量。来自Matlab我会写一个for循环并计算它。我想知道是否有一个“R” - 更优雅吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用rle查找连续差异的运行

r <- rle(diff(as.numeric(ExampleData[,1])))
cbind(cumsum(r$lengths)-r$lengths+1,cumsum(r$lengths)+1)[r$values==1,]
     [,1] [,2]
[1,]    1  500
[2,]  501  516
[3,]  517 1517

此输出表示从索引1到500运行,另一个从索引501到516运行,另一个从索引517到1517运行。