#r #time
#r #время
Вопрос:
У меня возникли проблемы с преобразованием временного диапазона в столбце в читаемые данные для R. Как бы мне это преобразовать?
[1] «05:30P -08:00P» «07:00A -09:35A» «08:00A -10:30A» «08:55P -11:00P» «06:00P -06:30P»
c("05:30P -08:00P", "07:00A -09:35A", "08:00A -10:30A", "08:55P -11:00P",
"06:00P -06:30P")
Комментарии:
1. Каков ожидаемый результат
Ответ №1:
Если мы хотим преобразовать в Datetime
, можно разделить -
на два столбца, а затем использовать as.POSIXct
для выполнения преобразования
library(stringr)
library(dplyr)
library(tidyr)
str_replace_all(str1, "([AP])", "\1M") %>%
tibble(str1 = .) %>%
separate(str1, into = c('start', 'end'), sep="\s*-") %>%
mutate(across(c(start, end), ~ as.POSIXct(., format = '%I:%M %p')))
# A tibble: 5 x 2
# start end
# <dttm> <dttm>
#1 2020-08-19 17:30:00 2020-08-19 20:00:00
#2 2020-08-19 07:00:00 2020-08-19 09:35:00
#3 2020-08-19 08:00:00 2020-08-19 10:30:00
#4 2020-08-19 20:55:00 2020-08-19 23:00:00
#5 2020-08-19 18:00:00 2020-08-19 18:30:00
Или использование lubridate
library(lubridate)
str_replace_all(str1, "([AP])", "\1M") %>%
tibble(str1 = .) %>%
separate(str1, into = c('start', 'end'), sep="\s*-") %>%
mutate(across(c(start, end), ~ parse_date_time(., 'IMp')))
данные
str1 <- c("05:30P -08:00P", "07:00A -09:35A", "08:00A -10:30A", "08:55P -11:00P",
"06:00P -06:30P")
Ответ №2:
Попытка использования базового R strcapture
для разделения временных меток на две части:
dr <- c("05:30P -08:00P", "07:00A -09:35A", "08:00A -10:30A", "08:55P -11:00P",
"06:00P -06:30P")
tms <- strcapture(r"((d :d [AP])[- ] (d :d [AP]))", dr, proto=list(start="",end=""))
tms[] <- lapply(tms, function(x) as.POSIXct(paste0(x, "M"), format="%I:%M%p", tz="UTC"))
# start end
#1 2020-08-20 17:30:00 2020-08-20 20:00:00
#2 2020-08-20 07:00:00 2020-08-20 09:35:00
#3 2020-08-20 08:00:00 2020-08-20 10:30:00
#4 2020-08-20 20:55:00 2020-08-20 23:00:00
#5 2020-08-20 18:00:00 2020-08-20 18:30:00
Комментарии:
1.
strcapture
мгновенно становится моей следующей функцией для «master» … спасибо @thelatemail2. @r2evans — это недооцененный и действительно довольно удобный интерфейс для разделения на основе регулярных выражений.