【问题标题】:Extract continuous measurements from data frame从数据框中提取连续测量值
【发布时间】:2025-11-29 00:15:02
【问题描述】:

我想对包含测量时间序列和相应 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”方式可以让它更优雅?

非常感谢!

【问题讨论】:

    标签: r subset


    【解决方案1】:

    您可以使用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 的运行。

    【讨论】: