我有一个同时包含时间和日期的字符,我想将其拆分为日期和时间。 我尝试过:
datetime <- as.character("12:00:00 03-May-2019")
date1 <- as.Date(datetime ,"%d/%m/%Y")
date1
time1 <- as.Date(datetime ,%H:%M:%S)
time1
但我只得到NA退回。
谢谢您的帮助。
答案 0 :(得分:1)
format
应该与初始vector
中的匹配。
as.Date(datetime, "%H:%M:%S %d-%b-%Y")
#[1] "2019-05-03" "2018-05-03" "2017-05-03"
如果打算按空格" "
strsplit(datetime, "\\s+")
或与read.table
df1 <- read.table(text = datetime, header = FALSE, col.names = c("time", "date"))
df1$date <- as.Date(df1$date, "%d-%b-%Y")
df1
# time date
#1 12:00:00 2019-05-03
#2 02:01:00 2018-05-03
#3 11:00:22 2017-05-03
或与tidyverse
library(tidyverse)
tibble(datetime) %>%
separate(datetime, into = c('date', 'time'), sep=" ") %>%
mutate(time = dmy(time))
# A tibble: 3 x 2
# date time
# <chr> <date>
#1 12:00:00 2019-05-03
#2 02:01:00 2018-05-03
#3 11:00:22 2017-05-03
datetime <- c("12:00:00 03-May-2019",
"02:01:00 03-May-2018",
"11:00:22 03-May-2017")
答案 1 :(得分:1)
这是一个提取日期(作为Date
对象)和时间(作为字符串)的函数。请参阅this post and answers,以获取将时间保留为字符串的一些动机。
extract_date_time <- function(dt){
dt_split <- strsplit(dt, split=" ")
lapply(dt_split, function(dts){
list(date=as.Date(dts[2], '%d-%b-%Y'), time=dts[1])
})
}
用法示例:
datetime <- as.character("12:00:00 03-May-2019")
extract_date_time(datetime)
您还可以将此功能应用于更长的字符串矢量,例如您最初拥有的字符串,如下所示:
datetimes <- c("12:00:00 03-May-2019",
"02:01:00 03-May-2018",
"11:00:22 03-May-2017")
extract_date_time(datetimes)