#r #string #time #diff #lubridate
#r #строка #время #разница #lubridate
Вопрос:
Я добавляю ежедневные часы / минуты (1:00,2:00,…, 13:30,…, 22:30, 24:10) для столбца строки расписания df для начального и конечного часа, после этого я хотел бы использовать разницу в часах между ними.
Вот моя попытка:
# intial string example #
df[1, "schedule"]
// console output//
"14:00H ÀS 22:18H - 1H DE DESCANSO"
## setting hour and minutes format ##
initial_hour <- hm(
as.character(
factor(
substr(
df$schedule,
start = 1,
stop = 5)
)))
final_hour <- hm(
as.character(
factor(
substr(
df$schedule,
start = 11,
stop = 15))))
# hour difference ##
difftime(final_hour, initial_hour, tz = Sys.timezone(location = TRUE) , units = "hours")
// console output //
Error in as.POSIXct.numeric(time1, tz = tz) : 'origin' must be supplied
Можно ли установить «origin» внутри функции аргумента?
Комментарии:
1. Не могли бы вы добавить вывод из dput (head (df, 5))
Ответ №1:
Как вы, кажется, используете lubridate
, вы могли бы просто вычесть периоды без difftime
:
h1 <- lubridate::hm('24:10')
h2 <- lubridate::hm('23:05')
h1-h2
#> [1] "1H 5M 0S"
Создано 2020-09-25 пакетом reprex (версия 0.3.0)
Ответ №2:
Помещаем его в фрейм данных и используем dplyr
и lubridate
library(dplyr)
library(lubridate)
df %>%
mutate(time_difference =
hm(
substr(schedule,
start = 11,
stop = 15)
) -
hm(
substr(schedule,
start = 1,
stop = 5)
))
#> Note: method with signature 'Period#ANY' chosen for function '-',
#> target signature 'Period#Period'.
#> "ANY#Period" would also be valid
#> schedule time_difference
#> 1 14:00H ÀS 22:18H - 1H DE DESCANSO 8H 18M 0S
#> 2 18:00H ÀS 16:18H - 1H DE DESCANSO -2H 18M 0S
Ваша запись плюс еще одна для данных
df <- data.frame(
schedule = c("14:00H ÀS 22:18H - 1H DE DESCANSO",
"18:00H ÀS 16:18H - 1H DE DESCANSO")
)