R 并润滑 : create intervals in a time series using a criteria

标签 r

我无法从某些时间序列数据创建一系列间隔。

如果我有一个包含日期、浓度以及浓度是否超过阈值 5 的数据框 (df):

df <- structure(list(DATE = structure(c(1356183950, 1356184851, 1356185750, 
1356186650, 1356187551, 1356188450, 1356189350, 1356190250, 1356191150, 
1356192050, 1356192950, 1356193851, 1356194750, 1356195650, 1356196550, 
1356197450), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    CONC = c(3.8, 3.8, 3.7, 4.3, 5, 6, 7.2, 7, 6, 5, 4.3, 
    3.7, 3.4, 3.3, 3.1, 3), EXCEED = c(0, 0, 0, 0, 1, 1, 1, 1, 
    1, 1, 0, 0, 0, 0, 0, 0)), .Names = c("DATE", "TURBIDITY", 
"EXCEED"), row.names = 1070:1085, class = "data.frame")

我想根据低于或高于阈值的连续测量结果为每个时间段创建一个间隔,并返回摘要统计信息,例如:

   START                END                 MAXCONC
1  2012-12-22 13:45:50  2012-12-22 14:30:50 4.3
2  2012-12-22 14:45:51  2012-12-22 16:00:50 7.2 
3  2012-12-22 16:15:50  2012-12-22 17:30:50 4.3

我不知道如何使用 lubridate 创建不同的间隔。我应该使用另一个包吗?想法?

最佳答案

这是一个快速的data.table解决方案。我使用了 development version on GitHub 中的 rleid 函数但你可以只使用基本的 R rle 函数来代替

library(data.table) # v>=1.9.5
setDT(df)[, .(
              START = min(DATE),   
              END = max(DATE),
              MAXCONC = max(TURBIDITY)
              ),
          by = rleid(EXCEED)]

##    rleid               START                 END MAXCONC
## 1:     1 2012-12-22 13:45:50 2012-12-22 14:30:50     4.3
## 2:     2 2012-12-22 14:45:51 2012-12-22 16:00:50     7.2
## 3:     3 2012-12-22 16:15:50 2012-12-22 17:30:50     4.3

关于R 并润滑 : create intervals in a time series using a criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730273/

相关文章:

r - R plot 图例中的换行符

可通过 Web 访问的 R API

r - 是否有一个函数与 close() 的关系相当于 %in% 与 == 的关系?

r - 从 R 的 Johansen 程序 (ca.jo) 摘要中提取信息

r - 根据列中的值范围删除行

mysql - 如何根据其他列找到一列的不同之处

r - 更快地计算每个时间步内所有个体之间的距离

R ggplot 循环内带有变量

r - 如何从联合函数中获取 match.call()?

r - 使用 dplyr 管道删除数据帧列表中的空列