将时间为零的日期时间和单独的时间列转换为 R 中的日期时间

Convert a datetime with zeroes for the time and a separate time column into datetime in R

有一个 table 具有以下形式:

ID | Date                          | Time
A    2021-07-26T00:00:00.000+0000   1:00AM
b    2021-08-13T00:00:00.000+0000   10:00PM

data.frame(ID = c("A", "B"), date = c("2021-07-26T00:00:00.000+0000", " 2021-08-13T00:00:00.000+0000"), time = c("1:00AM", "10:00PM"))

与上面的数据框一样,除了 Date 是一种日期时间格式。给定一个日期时间向量,我想将时间添加到日期时间,其中所有时间部分当前为 0。

预期输出:

ID | new_date_time                          
A    2021-07-26 01:00:00  
b    2021-08-13 22:00:00  

我们可以使用 lubridate/str_replace 进行转换,即使用 str_replace 将 'T' 开始的子字符串替换为 'time' 列,并使用 ymd_hm 来自 [=16] =] 进行转换

library(dplyr)
library(lubridate)
library(stringr)
df1 %>% 
     transmute(ID, new_date_time = ymd_hm(str_replace(date, "T.*", 
         str_c(' ', str_pad(time, width = 7, pad = '0')))))

-输出

 ID       new_date_time
1  A 2021-07-26 01:00:00
2  B 2021-08-13 22:00:00

或者也可以

library(parsedate)
df1 %>%
    mutate(date = ymd_hms(date), time = format(parse_date(time), 
      '%H:%M:%S')) %>%
    transmute(ID, new_date_time = ymd_hms(str_c(date, ' ', time)))
  ID       new_date_time
1  A 2021-07-26 01:00:00
2  B 2021-08-13 22:00:00

这是一个基本的 R 选项 -

transform(df, new_date_time = as.POSIXct(paste(sub('T.*', '', date), time), 
              format = '%Y-%m-%d %I:%M%p', tz = 'UTC'))

#  ID                         date    time       new_date_time
#1  A 2021-07-26T00:00:00.000+0000  1:00AM 2021-07-26 01:00:00
#2  B 2021-08-13T00:00:00.000+0000 10:00PM 2021-08-13 22:00:00