【问题标题】:Convert hours:minutes:seconds to minutes将小时:分钟:秒转换为分钟
【发布时间】:2015-05-18 00:13:40
【问题描述】:

我有一个格式为小时:分钟:秒的向量“Time.Training”(例如

Time.Training <- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")

我想把它转换成分钟格式:

Time.Training.Minutes <- c(60, 45, 30, 90)

我想知道是否有人在 R 中有一种直接的方法。

非常感谢。

马特

【问题讨论】:

  • Time.Training 向量正在使用 url 从 Google 表格中提取。它以 hh:mm:ss 格式进入 R。希望将其转换,以便我可以计算运动员的训练负荷,但我需要在几分钟内完成。

标签: r datetime time type-conversion


【解决方案1】:

从日期时间列中获取小时列并创建一个新的 cloumn 小时并在该列中仅提供小时数据 2011-01-01 00:00:01 答: bikeshare$hour

【讨论】:

    【解决方案2】:

    使用 as.difftime:

    > Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")
    > strtoi(as.difftime(Time.Training, format = "%H:%M:%S", units = "mins"))
    [1] 60 45 30 90
    

    【讨论】:

      【解决方案3】:

      这里有一些替代方案:

      1) chron 包有一个 "times" 类,其中 1 个单位是一天,一天有 60 * 24 分钟,所以:

      library(chron)
      60 * 24 * as.numeric(times(Time.Training))
      

      给予:

      [1] 60 45 30 90
      

      1a) 另一种使用 chron 的方法如下(给出相同的答案):

      library(chron)
      
      ch <- times(Time.training)
      60 * hours(ch) + minutes(ch)
      

      2) 这是一种使用read.table 和矩阵/向量乘法的方法。不需要任何软件包:

      c(as.matrix(read.table(text = Time.Training, sep = ":")) %*% c(60, 1, 1/60))
      

      (使用"POSIXlt" 可能是没有包的最直接的方法,但另一个答案已经提供了。)

      【讨论】:

        【解决方案4】:

        使用lubridate:

        Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")
        
        library(lubridate)
        res <- hms(Time.Training)        # format to 'hours:minutes:seconds'
        hour(res)*60 + minute(res)       # convert hours to minutes, and add minutes
        ## [1] 60 45 30 90
        

        【讨论】:

        • 这行得通。我使用的确切代码是: library(lubridate); res
        • 不客气。在问题中给出的示例中,@David Arenburg 的方法也有效。如果您想根据实际数据获得答案,您应该考虑使用dput()(至少在数据的子集上)。
        【解决方案5】:

        试试这个。我们基本上转换为POSIXlt 类,首先使用Sys.Date() 函数将真实日期粘贴到向量中(因为在基础R 中没有小时类),然后使用hourmin 参数以实现输出

        Res <- as.POSIXlt(paste(Sys.Date(), Time.Training))
        Res$hour*60 + Res$min
        ## [1] 60 45 30 90
        

        【讨论】:

        • 数据表称为'load',变量称为'Time.Spent.Training'。我使用了命令:attach(load) 后跟 Res
        • 您需要从数据集中调用您的列。试试load$Time.Spent.Training,而不是Time.Spent.Training
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 2015-06-02
        • 2011-09-01
        相关资源
        最近更新 更多