




Вы можете попробовать chron пакет
transform(
df,
duration = chron(times = t1) - chron(times = t2)
)
такой, что
t1 t2 duration
1 12:24:13 10:46:34 01:37:39
2 10:04:39 09:43:23 00:21:16
Данные
df <- data.frame(t1 = c("12:24:13", "10:04:39"), t2 = c("10:46:34", "09:43:23"))
Спасибо. Проблема в том, что у меня есть 700 наблюдений в каждом столбце, так как я могу преобразовать весь столбец, используя hms()
@roosadahal Я обновил свой ответ, чтобы он мог работать с вашим фреймом данных
Можешь попробовать:
t1 <- c('12:24:13','10:04:39')
t2 <- c('10:46:34','09:43:23')
unclass(as.POSIXct(t1,format = "%H:%M:%S")) - unclass(as.POSIXct(t2,format = "%H:%M:%S"))
[1] 5859 1276
attr(,"tzone")
POSIXct — это количество секунд с начала эпохи, то есть 1970-01-01. В приведенном выше примере вывод представляет собой разницу между временем в секундах.
Мы также можем преобразовать в ITime с помощью data.table и получить разницу
library(data.table)
setDT(df)[, duration := as.ITime(t1) - as.ITime(t2)]
-выход
df
# t1 t2 duration
#1: 12:24:13 10:46:34 01:37:39
#2: 10:04:39 09:43:23 00:21:16
df <- data.frame(t1 = c("12:24:13", "10:04:39"), t2 = c("10:46:34", "09:43:23"))
Преобразуйте их в класс даты и времени, например
POSIXct, и тогда вычитание будет работать нормально. Смотрите пару вариантов здесь.