【问题标题】:Trouble formatting multiple date styles with lubridate使用 lubridate 格式化多个日期样式时遇到问题
【发布时间】:2019-10-05 20:41:12
【问题描述】:

我正在格式化包含记录日期的一列。在列中有多种日期格式,我需要将它们转换为一种一致的格式。

我尝试使用 lubridate() 和 parse_date_time() 函数。 我还尝试将列作为一个字符和一个因素

这是日期列的样子(超过 100,000 行)

Date.of.Record 
2018-01-01     
20180102     
2018/01/03  
2018-01-04  
2018-01-05
20180106 

并且 id 喜欢将它们格式化为:

Date.of.Record 
20180101     
20180102     
20180103  
20180104  
20180105
20180106 

这是我尝试过的代码:

library(lubridate)
date <- parse_date_time(bind$Date.of.Record, orders =c(ymd()))
date2 <- as.Date(bind$Date.of.Record, "%yyyy-%mm-%dd")

'date' 的代码根本不起作用,'date2' 的代码会产生所有 NA。

我意识到我可以按日期格式将数据子集到不同的数据集中,然后在我正确格式化后组合,但我希望有一种更有效的方法来做到这一点。我还是 R 新手,并尝试学习处理大型数据集的最佳方法

感谢您的帮助!!!

【问题讨论】:

  • 如果你开始的日期都是正确的顺序(年、月、日),只是中间有各种标点符号,你可以把它们当作字符串并删除任何非数字字符?如str_remove_all(Date.of.Record, "\\D+")

标签: r date formatting lubridate


【解决方案1】:

一个选项是anydate 来自anytime

library(anytime)
bind$Date.of.Record <- format(anydate(bind$Date.of.Record), "%Y%m%d")
bind$Date.of.Record
#[1] "20180101" "20180102" "20180103" "20180104" "20180105" "20180106"

如果需要是数字,用as.numeric换行


orders 是字符串格式

library(lubridate)
format(parse_date_time(bind$Date.of.Record, orders = "ymd"), "%Y%m%d")
#[1] "20180101" "20180102" "20180103" "20180104" "20180105" "20180106"

数据

bind <- structure(list(Date.of.Record = c("2018-01-01", "20180102", "2018/01/03", 
 "2018-01-04", "2018-01-05", "20180106")), class = "data.frame", 
 row.names = c(NA, -6L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多