Как преобразовать строку в указанный c формат времени в R? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть набор данных с 40 миллионами строк. Цель состоит в том, чтобы очистить его, начав с объединения столбца «Дата и время» в один. Мне удалось преобразовать данные из фактора в данные, используя lubridate. На этот раз я хочу сделать то же самое для столбца Time, чтобы я мог объединить их в 1 столбце как дату и время, используя ymd_hms () и paste (). Однако у меня возникли проблемы со столбцом времени.

Вот пример содержимого указанного столбца:

sample_time_as_string <- c("18:00", "12:57","07:54:40", "17:59:02","01:00" )

Цель - преобразовать эту строку в чч: мм: сс так, например, «18:00» должно стать «18:00:00», а «17:59:02» должно остаться прежним. Таким образом было бы легко объединить столбцы даты и времени.

Это то, что я до сих пор делал, используя lubridate

sample_time_applied_lubridate <- hms(sample_time_as_string)

Warning message:
In .parse_hms(..., order = "HMS", quiet = quiet) :
Some strings failed to parse, or all strings are NAs

sample_time_applied_lubridate
[1] NA           NA           "7H 54M 40S" "17H 59M 2S" NA  

Я попробовал другую функцию

sample_time_applied_lubridate <- hm(sample_time_as_string)

Та же ошибка

Warning message:
In .parse_hms(..., order = "HM", quiet = quiet) :
Some strings failed to parse, or all strings are NAs

sample_time_applied_lubridate
[1] "18H 0M 0S"  "12H 57M 0S" NA           NA           "1H 0M 0S"

Я попробовал parse_date_time

sample_time_applied_lubridate <- parse_date_time(sample_time_as_string, orders = "HMS")

Warning message:
3 failed to parse. 

У вас есть еще какие-нибудь предложения по поводу того, что я могу попробовать? Может быть, lubridate не правильный подход для этого?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

попробуйте передать два формата в orders

parse_date_time(c("18:00", "12:57","07:54:40", "17:59:02","01:00" ), orders = c("HM","HMS")) %>% 
  format("%H:%M:%S")
0 голосов
/ 22 апреля 2020

Вы можете использовать функцию str_pad из stingr для заполнения времен без секунд.

library(stringr)
ifelse(nchar(sample_time_as_string)==5,
            str_pad(paste0(sample_time_as_string, ":"), width=8, side="right", pad="0"), 
       sample_time_as_string)

#[1] "18:00:00" "12:57:00" "07:54:40" "17:59:02" "01:00:00"
...