我有如下格式的日期列。我想把它转换成yyyy-mm-dd格式。
|Date_Col|
----------
|14/10/2017 10:58|
|30/09/2017 23:15|
|14/05/2016 21:10|
|16/06/2018 22:10|
|07/06/2016 13:05|
|19/02/2017 13:16|
当我使用as.Date(df$Date_Col)
时,它返回"0014-10-20"0030 - 09 - 20 -";"0014 - 05 - 20 -";0016 - 06 - 20";0007 - 06 - 20";"0019 - 02年- 20">如果我使用as.Date(df$Date_Col, "%m/%d/%Y")
,它给出NA NA NA NA "2016-07-06"NA
如果我使用library(lubridate)
和mdy(df$Date_Col)
,它给出NA NA NA NA NA NA警告信息:所有格式都无法解析。没有找到任何格式
有什么建议如何将这列转换为yyyy-mm-dd格式?
提前感谢您的宝贵时间。
使用lubridate
中的dmy_hm
将数据转换为日期-时间
library(lubridate)
dmy_hm(df$Date_Col)
#[1] "2017-10-14 10:58:00 UTC" "2017-09-30 23:15:00 UTC"
#[3] "2016-05-14 21:10:00 UTC" "2018-06-16 22:10:00 UTC"
#[5] "2016-06-07 13:05:00 UTC" "2017-02-19 13:16:00 UTC"
如果您只需要日期,请在上面的输出中添加as.Date
。
as.Date(dmy_hm(df$Date_Col))
#[1]"2017-10-14" "2017-09-30" "2016-05-14" "2018-06-16" "2016-06-07" "2017-02-19"
df <- structure(list(Date_Col = c("14/10/2017 10:58", "30/09/2017 23:15",
"14/05/2016 21:10", "16/06/2018 22:10", "07/06/2016 13:05", "19/02/2017 13:16")),
row.names = c(NA, -6L), class = "data.frame")
使用Base R或lubridate
包解决方案的关键是在日期转换函数的format=
参数中包含小时和分钟规格,以告诉R如何解析输入文本字符串中的时间信息。
转换原始文章中的值的一种方法是使用as.POSIXlt()
函数和以下格式语法。我们可以使用format()
函数以%Y-%m-%d
格式打印结果对象。
format(as.POSIXlt("14/10/2017 10:58",format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
…输出:
> format(as.POSIXlt("14/10/2017 10:58",format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
[1] "2017-10-14"
as.Date()
也可以工作,只要使用format=
参数并包含%H:%M
内容:
format(as.Date("14/10/2017 10:58",format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
> format(as.Date("14/10/2017 10:58",format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
[1] "2017-10-14"
对于lubridate
包,我们可以使用as_date()
。
library(lubridate)
format(as_date(df$Date,format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
> format(as_date(df$Date,format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
[1] "2017-10-14" "2017-09-30" "2016-05-14" "2018-06-16" "2016-06-07" "2017-02-19"
原始帖子中日期列表的可复制示例如下:
textData <- "Date
14/10/2017 10:58
30/09/2017 23:15
14/05/2016 21:10
16/06/2018 22:10
07/06/2016 13:05
19/02/2017 13:16"
df <- read.csv(text=textData,header=TRUE,colClasses = "character")
format(as.Date(df$Date,format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
…输出:
> format(as.Date(df$Date,format="%d/%m/%Y %H:%M"),"%Y-%m-%d")
[1] "2017-10-14" "2017-09-30" "2016-05-14" "2018-06-16" "2016-06-07" "2017-02-19"