【问题标题】:Subtracting times that exceed 60 minutes减去超过 60 分钟的时间
【发布时间】:2017-05-06 03:18:18
【问题描述】:

我有一个数据集,其中包含足球赛事的时间安排。一场比赛超过 60 分钟,我正在尝试计算间隔。这是我拥有的数据:

data <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39")

我的问题源于分钟超过 60 分钟(它们可能在 0 到 90 分钟之间)。所以本质上,我想要能打印出事件间隔的代码:

"6:13", "8:07", "13:43",..., "3:17"

将数据转换为小时然后从那里开始会更好吗?只是一个想法,我不得不让它变得更容易。我已经查看了其他问题,但我找不到任何要求 R 的内容。如果有并且我错过了它,请随时批评,但请链接我的副本。

提前致谢!

【问题讨论】:

    标签: r time


    【解决方案1】:

    另一个base R尝试使用as.difftime明确指定单位:

    out <- diff(sapply(strsplit(data, ":"), function(x) 
      Reduce(`+`, Map(as.difftime, as.numeric(x),  units=c("mins","secs"))))
    )
    
    # time difference in seconds
    out
    #[1] 373 487 823  42 153 463  38 809 197
    
    # formatted string
    sprintf("%d:%02d", out %/% 60, out %% 60)
    #[1] "6:13"  "8:07"  "13:43" "0:42"  "2:33"  "7:43"  "0:38"  "13:29" "3:17"
    

    【讨论】:

      【解决方案2】:

      这可能也有效

      data1 <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39")
      data2 = sapply(strsplit(data1,":"), # from http://stackoverflow.com/a/5187350/7128934
                     function(x) {
                         x <- as.numeric(x)
                         x[1]+x[2]/60
                     }
      )
      
      difference = list()
      for (i in 1: (length(data1) - 1))  {
      difference[i] = data2[i+1] - data2[i]
      }
      

      【讨论】:

      • 以秒为单位计算差异的相关方法是secDiffs &lt;- diff(sapply(strsplit(data, split=":"), function(x) sum(as.integer(x) * c(60L, 1L))))
      【解决方案3】:

      寻找 lubridate 这类东西。

      可能有一种更简单的方法,但这很有效:

      library(lubridate)
      data <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39")
      out <- seconds_to_period(diff(as.numeric(ms(data)))
      

      如果您希望输出为格式化字符串而不是句点,请使用 sprintf:

      sprintf('%02d:%02d', minute(out), second(out))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-04
        • 2018-05-03
        • 2023-03-15
        • 2018-03-06
        • 1970-01-01
        相关资源
        最近更新 更多