Вы можете использовать difftime
и lubridate::seconds_to_period
, чтобы получить разницу во времени для значений таймера.dplyr::mutate_at
может быть хорошим вариантом для использования, так как OP упомянул, что он получил более 65 столбцов.
library(dplyr)
library(lubridate)
# Start time for Timer
start_time <- dmy_hms("30/12/1899 00:00:00")
df %>% mutate_at(vars(starts_with("T")), dmy_hms) %>%
mutate_at(vars(starts_with("T")),
funs(Timer = seconds_to_period(difftime(. , start_time, units = "secs"))))
# ID T1 T2 T1_Timer T2_Timer
# 1 1 1899-12-30 13:12:59 1899-12-30 13:12:59 13H 12M 59S 13H 12M 59S
# 2 2 1899-12-30 12:59:20 1899-12-30 12:59:20 12H 59M 20S 12H 59M 20S
# 3 3 1899-12-30 11:58:26 1899-12-30 11:58:26 11H 58M 26S 11H 58M 26S
# 4 4 1899-12-30 11:15:45 1899-12-30 11:15:45 11H 15M 45S 11H 15M 45S
# 5 5 1899-12-30 04:17:14 1899-12-30 04:17:14 4H 17M 14S 4H 17M 14S
# 6 6 1899-12-30 03:08:34 1899-12-30 03:08:34 3H 8M 34S 3H 8M 34S
Данные: Пример данных.
Timeframe_x1 <- c("30/12/1899 13:12:59", "30/12/1899 12:59:20", "30/12/1899 11:58:26",
"30/12/1899 11:15:45", "30/12/1899 04:17:14", "30/12/1899 03:08:34")
df <- data.frame(ID = 1:6, T1 = Timeframe_x1, T2 = Timeframe_x1)
df
# ID T1 T2
# 1 1 30/12/1899 13:12:59 30/12/1899 13:12:59
# 2 2 30/12/1899 12:59:20 30/12/1899 12:59:20
# 3 3 30/12/1899 11:58:26 30/12/1899 11:58:26
# 4 4 30/12/1899 11:15:45 30/12/1899 11:15:45
# 5 5 30/12/1899 04:17:14 30/12/1899 04:17:14
# 6 6 30/12/1899 03:08:34 30/12/1899 03:08:34
str(df)
# 'data.frame': 6 obs. of 3 variables:
# $ ID: int 1 2 3 4 5 6
# $ T1: Factor w/ 6 levels "30/12/1899 03:08:34",..: 6 5 4 3 2 1
# $ T2: Factor w/ 6 levels "30/12/1899 03:08:34",..: 6 5 4 3 2 1
Примечание: Я изменил имена столбцов на T1
и T2
для простоты отображения решения в SO.