如何在R中将多个日期格式格式化为一个?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在R中将多个日期格式格式化为一个?相关的知识,希望对你有一定的参考价值。
我试图在R中以相同的方式将一列日期全部格式化。但是,有很多不同版本的日期。
我已经查看了stackoverflow上的其他答案,但没有一个包含所有这些版本的日期(例如1999年7月4日):
- 7/4/99
- 07/04/99
- 7/4/1999
- 07/04/1999
- 070499
- 7499
- 07041999
- 741999
- 7-4-99
- 07-04-99
- 7-4-1999
- 07-04-1999
我已经尝试删除所有' - '和'/',所以我只剩下数字,但看起来问题是天数/月只有一位数。我试过了
if(nchar(data$birthday) == 6) (data$birthday = paste0("0", data$birthday))
但是,如果月份是用一位数写的,那只能解决问题。
这是我认为最接近的,但它仍然会产生错误。
data$newbirthday <- multidate(data$birthday, c("%m%d%Y", "%m%d%y", "%m/%d/%Y", "%m/%d/%y","%m-%d-%Y","%m-%d-%y")
- 该格式的结果有两个版本:07/04/99和07-04-99
- 但是有两个版本将年份改为2019年:07/04/1999和07-04-1999
- 两个版本是NA:741999 7499
答案
我会使用lubridate
灵活地(并巧妙地)解析不同的日期格式。
在你的情况下,我们得到
ss <- c(
"7/4/99", "07/04/99", "7/4/1999",
"07/04/1999", "070499", "7499",
"07041999", "741999", "7-4-99",
"07-04-99", "7-4-1999", "07-04-1999")
library(lubridate)
dmy(ss)
#[1] "1999-04-07" "1999-04-07" "1999-04-07" "1999-04-07" "1999-04-07"
#[6] NA "1999-04-07" NA "1999-04-07" "1999-04-07"
#[11] "1999-04-07" "1999-04-07"
#Warning message:
# 2 failed to parse.
剩下的是2个(模棱两可的)日期给NA
。请注意,lubridate::dmy
识别的所有日期都是正确的。
这里的坏人是"7499"
和"741999"
,两者都是模棱两可的;例如,考虑一下"11199"
:这应该是“1999年1月11日”还是“1999年11月1日”?没有办法说出来。同样为"1111999"
。
事实上,lubridate
返回NA
是正确的结果,因为这些日期不能(也不应该)解析。
以上是关于如何在R中将多个日期格式格式化为一个?的主要内容,如果未能解决你的问题,请参考以下文章
如何在IOS中将日期格式化为字符串,如“一天前”、“分钟前”?