【问题标题】:How to cumulatively add time如何累计添加时间
【发布时间】:2019-04-20 12:13:42
【问题描述】:

我有以分钟为单位的时间间隔。

dfr <- data.frame(interval=c(rep("30",2),rep("60",2)),stringsAsFactors=F)

>> dfr
  interval
1       30
2       30
3       60
4       60

我有一个开始时间,比如 09:00。

time_begin <- "09:00"

我想从time_begin开始,并累积添加区间以获得以下结果:

  interval start   end
1       30 09:00 09:30
2       30 09:30 10:00
3       60 10:00 11:00
4       60 11:00 12:00

使用 dplyr/lubridate 的最佳方法是什么?

【问题讨论】:

    标签: r dplyr lubridate


    【解决方案1】:

    我们可以在没有任何外部包的情况下做到这一点

    v1 <- with(dfr, format(strptime(time_begin, "%H:%M") + 
                   c(0, cumsum(as.integer(interval) *60)), "%H:%M"))
    transform(dfr, start = v1[-length(v1)], end = v1[-1])
    #  interval start   end
    #1       30 09:00 09:30
    #2       30 09:30 10:00
    #3       60 10:00 11:00
    #4       60 11:00 12:00
    

    【讨论】:

      【解决方案2】:

      使用lubridate,我们可以首先创建end 列,方法是从time_begin 开始并添加interval minutes 的累积总和,然后使用这些值得到start 时间。

      library(lubridate)
      library(dplyr)
      
      dfr %>%
        mutate(end = time_begin + minutes(cumsum(interval)), 
               start = c(time_begin, end[-n()]))
      
      #  interval                 end               start
      #1       30 2019-04-20 09:30:00 2019-04-20 09:00:00
      #2       30 2019-04-20 10:00:00 2019-04-20 09:30:00
      #3       60 2019-04-20 11:00:00 2019-04-20 10:00:00
      #4       60 2019-04-20 12:00:00 2019-04-20 11:00:00
      

      在哪里

      time_begin <- as.POSIXct("09:00:00", format = "%T")
      

      上面的输出中有今天的日期。要获得与您完全相同的输出,我们可以format 输出

      dfr %>%
        mutate(end = time_begin + minutes(cumsum(interval)), 
               start = c(time_begin, end[-n()]), 
               start = format(start, "%T"), 
               end = format(end, "%T")) %>%
        select(interval, start, end)
      
      #  interval    start      end
      #1       30 09:00:00 09:30:00
      #2       30 09:30:00 10:00:00
      #3       60 10:00:00 11:00:00
      #4       60 11:00:00 12:00:00
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        相关资源
        最近更新 更多