首页 > 解决方案 > 将 hh:mm:ss 格式的时间转换为秒或分钟

问题描述

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

标签: r

解决方案


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")

推荐阅读