【问题标题】:Converting time in hh:mm:ss format to second or minutes将 hh:mm:ss 格式的时间转换为秒或分钟
【发布时间】:2021-04-14 11:58:09
【问题描述】:

我有一列采用这种格式的时间:43:46:18,它显示 hh:mm:ss(h:小时,m:分钟,s: second),我想将此列转换为秒(或分钟),但是“:”是多余的,我不知道应该如何处理?

【问题讨论】:

  • 问题应该提供测试数据。这次我在回答的备注中为您提供了这一点。

标签: r


【解决方案1】:

1) 定义一个函数,将时间的 3 个部分分成 3 列的数据框,将其转换为矩阵,然后矩阵将其与 3 个分量为数字的向量相乘在一小时、一分钟和一秒中的秒数。最后使用 c(...) 将其从 nx1 矩阵转换为纯向量。

要进行测试,请将其应用于末尾注释中定义的测试数据dat 的时间列。没有使用任何包。

time2sec <- function(x) {
  c(as.matrix(read.table(text = x, sep = ":")) %*% c(3600, 60, 1))
}

# test using dat from Note at the end
transform(dat, seconds = time2sec(time))

给予:

  id     time seconds
1  1 43:46:18  157578
2  2 43:46:18  157578

2) 另一种方法是将小时转换为 POSIXlt,然后将其转换为秒。这给出了与上面相同的结果。同样,没有使用任何包。

time2sec_2 <- function(x) {
  with(as.POSIXlt(x, format = "%Y:%M:%S"), 3600 * (year + 1900) + 60 * min + sec)
}

transform(dat, seconds = time2sec_2(time))

注意

dat <- data.frame(id = 1:2, time = "43:46:18")

【讨论】:

    【解决方案2】:

    lubridate 包包含一些用于处理日期和时间的有用函数,特别是hms 对于以您的格式读取时间很有用。你可以这样使用:

    library(lubridate)
    
    as.numeric(hms("43:46:18"))
    # [1] 157578  #Conversion to seconds 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2020-09-04
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多