#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