我使用以下R代码通过lubridate和dplyr以字符格式从单独的日期和时间字段创建了POSIXct日期时间字段。
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
即使我根据数据使用了mdy_hms,我创建的start_dt字段也采用Y m d格式。此外,所有年份都已更改为2020年。
经历了几次,使用了粘贴vs.paste0等,但是仍然很困难。
答案 0 :(得分:1)
您的问题是paste0()
,它没有sep=
参数。因此,当您粘贴日期和时间时,您会得到1/28/201110:58
并将其分散到1/28/20/11/10/58
中,尽管它似乎与我的版本lubridate_1.6.0
不同。另外,您在哪里使用“ hms”,但是您的时间没有秒。这应该可以处理您的数据
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