Преобразование времени в формате чч:мм:сс в секунды или минуты

#r

Вопрос:

У меня есть столбец времени в этом формате: 43:46:18 что показывает чч:мм:СС (H: часы, м-минуты, s: секунды), я хочу, чтобы преобразовать этот столбец в несколько секунд (или минут), но «:» не нужна и я не знаю, как я должен справиться с этим?

Комментарии:

1. Вопросы должны содержать тестовые данные. На этот раз я изложил это для вас в Примечании к моему ответу.

Ответ №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