将时间为零的日期时间和单独的时间列转换为 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
有一个 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