【问题标题】:Spliting date/time data into constant time intervals将日期/时间数据拆分为恒定的时间间隔
【发布时间】:2017-10-24 13:34:42
【问题描述】:

我已经在这里发布了类似的问题:
time split to constant daily intervals and summarise the results

现在我正在尝试一个简单的版本:

我有一个数据,其中包含对象POSIXctdate/time 变量(称为x),格式如下:yyyy-mm-dd HH:MM:SS

date 并不是我真正感兴趣的。我要做的是将我的time 数据拆分为常量 时间间隔。

为了清楚起见,让我们从一些可重现的示例开始。使用dput,我的x 变量如下所示:

structure(c(1495608914, 1495642528, 1495642529, 1495607831, 1495641488, 1495643715), class = c("POSIXct", "POSIXt"), tzone="")

我已经能够使用:split(x, cut((x), "30 mins")) 将其拆分为时间间隔

但是,此方法从我在x 中的最小time 值开始拆分;但是,我有兴趣将数据拆分为恒定时间间隔。

所以,使用我上面提到的 拆分 方法,我将得到 20 个组,从 06:37:00 开始,间隔为 30 分钟(x 将在这 20 个组中的 3 个之间拆分2,1 和 3 次观察)。虽然我正在寻找有关数据点时间间隔的一些指示:

x                   v1   v2    . . . x.ind
06:37:11                             14
06:55:14                             14
15:58:08                             32
.
.
.

其中 1 代表00:00:00-00:30:00,2 代表00:30:00-01:00:00,...,14 代表06:30:00-07:00:00,...,48 代表23:30:00-00:00:00

【问题讨论】:

    标签: r datetime time split cut


    【解决方案1】:

    使用 dplyr 进行连接和分组以及 lubridate 进行日期舍入的解决方案floor_date

    library(dplyr)
    library(lubridate)
    
    observations <- data.frame(period = floor_date(x, unit = "30 minutes"), n=rep(1, length(x)))
    intervals <- data.frame(period = seq.POSIXt(min(observations), max(observations), by = 30*60))
    
    result <- intervals %>%
      full_join(observations) %>%
      group_by(period) %>%
      summarize(n=sum(n,na.rm= TRUE))
    

    【讨论】:

    • 运行“观察”代码行给我以下错误:Error in match.arg(unit) : arg should be one of "second", "minute", "hour", "day", "week", "month", "year", "quarter".. 你能估计这是为什么吗?
    • 对不起,我粘贴了旧代码 - 变量“xr”应该是observations,在最小值和最大值之内。我编辑了答案(但尚未测试)
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多