Объединение отдельных полей даты и времени в одно поле даты и времени - PullRequest
0 голосов
/ 04 июля 2018

Я использовал следующий код R для создания поля даты и времени POSIXct из отдельного поля даты и времени как в символьном формате, используя lubridate и dplyr.

library(dplyr)
library(lubridate)
c_cycle_work <- tibble(
  StartDate = c("1/28/2011", "2/26/2011", "4/2/2011", "4/11/2011"),
  StartTime = c("10:58", "6:02", "6:00", "9:47")
)

c_cycle_work %>%
  mutate(start_dt = paste0(StartDate, StartTime, sep = " ", collapse = NULL)) %>%
  mutate(start_dt = mdy_hms(start_dt))

# 1 1/28/2011     10:58   2020-01-28 11:10:58
# 2 2/26/2011      6:02   2020-02-26 11:06:02
# 3  4/2/2011      6:00   2020-04-02 11:06:00
# 4 4/11/2011      9:47   2020-04-11 11:09:47

Поле start_dt, которое я создал, имеет формат Y m d, хотя я использовал mdy_hms на основе данных. Кроме того, все годы были изменены на 2020 год.

Прошло несколько раз, использовала пасту против пасты0 и т. Д., Но все еще в тупике.

1 Ответ

0 голосов
/ 04 июля 2018

Ваша проблема - paste0(), у которого нет аргумента sep=. Поэтому, когда вы вставляете дату и время, вы получаете 1/28/201110:58, и оно разбрасывается на 1/28/20/11/10/58, хотя, похоже, с моей версией lubridate_1.6.0 это работает иначе. Кроме того, вы используете "хмс", но у вас не было секунд. Это должно работать с вашими данными

c_cycle_work %>%
  mutate(start_dt = paste(StartDate,  StartTime, sep=" ")) %>% 
  mutate(start_dt = mdy_hm(start_dt))

#   StartDate StartTime            start_dt
#       <chr>     <chr>              <dttm>
# 1 1/28/2011     10:58 2011-01-28 10:58:00
# 2 2/26/2011      6:02 2011-02-26 06:02:00
# 3  4/2/2011      6:00 2011-04-02 06:00:00
# 4 4/11/2011      9:47 2011-04-11 09:47:00
...