从数据框中提取连续测量值
Extract continuous measurements from data frame
我想对一个数据帧进行子集化,该数据帧由具有相应 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" 方法可以使它更优雅?
非常感谢!
您可以使用 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。
我想对一个数据帧进行子集化,该数据帧由具有相应 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" 方法可以使它更优雅?
非常感谢!
您可以使用 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。