使用R包进行日期转换



我有如下格式的日期列。我想把它转换成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"

最新更新