首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >parse_date_time日月混在一起

parse_date_time日月混在一起
EN

Stack Overflow用户
提问于 2017-08-29 19:26:04
回答 1查看 345关注 0票数 1

我正在我的数据中的几个列上使用parse_date_time,这些列有多种日期格式。例如,列可以具有日期格式"%d-%b-%y"和,"%m/%d/%Y"

因此,"06/11/2017" ("%m/%d/%Y")和"11-Jun-17" ("%d-%b-%y")对应于同一日期:"2017-06-11“("%Y-%m-%d")。

我使用lubridate::parse_date_time解析日期,其中可以在orders参数中指定不同的日期格式:

代码语言:javascript
运行
复制
x <- c("06-11-2017", "11-Jun-17")
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng")
# [1] "2017-11-06 UTC" "2017-06-11 UTC"

虽然这两个日期都应该显示为"2017-06-11",但在"%m/%d/%Y"日期中不能正确解析月和日,通过更改月份来检查:

代码语言:javascript
运行
复制
x <- c("05-11-2017", "11-Jun-17")
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng")
# [1] "2017-11-05 UTC" "2017-06-11 UTC"

05应该被解析为%m,但它不是。

我对parse_date_time的调查表明存在一些bug,我认为这就是其中的情况。然而,我想知道我能做些什么来获得我所需要的结果?

更新:下面是我正在使用的数据的一个示例。通过添加“精确=真”,它解决了我的问题。

test$Transmission.date 1“22-2月16”“10-3月-16”“10-3月-16”“10-3月16”“15-1月-16”“15-1月-16”"4/6/2016“”12 "4/6/2016“4/6/2016”"4/6/2016“2016年12月4日“2016年12月4日”“2016年12月4日”“2016年4月12日”2016年4月12日2016年"4/12/2016“"4/12/2016”"4/12/2016“”23 "4/12/2016“4/4/2016”"4/4/2016“"4/4/2016”"4/4/2016“4/4/2016 "4/4/2016”"4/4/2016“"4/4/2016“"4/4/2016”4/4/2016“"4/4/2016”34 "4/4/2016“"4/4/2016”“test$Buyer.RFQ.Close.Date 1”25-2月16日“10-3月-16”“10-3月-16”“10-3月-16”“27-1月-16日”27日-1月16日-16“27-1月-16”“27-1月-16”"5/4/2016“12 "5/4/2016”"5/4/2016“"5/4/2016”"5/10/2016“"5/10/2016”"5/10/2016“"5/10/2016”"5/10/2016“"5/10/2016”"5/10/2016“"5/10/2016”23“2016年10月5日“2016年4月28日”、“2016年2月5日”、“2016年4月28日”、“2016年5月2日”、“2016年5月2日”、“2016年5月2日”、“2016年5月2日”、“2016年5月2日”、“2016年5月2日”、“2016年4月28日”、“2016年5月2日”、“2016年4月28日”、“2016年5月2日”“test$RFQ.close.date 1”、“2016年2月25日至16日”“10-3月-16”“10-3月-16”“10-3月-16”“27-1月-16”“2016年1月27日-16日”"4/22/2016“12 "4/22/2016”"4/22/2016“"4/22/2016”“4/22/2016”“2016年5月3日”“2016年5月3日”、“2016年3月5日”、“2016年5月3日”、“2016年5月3日”、“2016年5月3日”、“2016年5月3日”、“2016年3月23日”、“2016年4月28日”、“2016年4月28日”、“2016年4月28日”、"4/28/2016“、"4/28/2016”、"4/28/2016““2016年4月28日"”34 "“2016年4月28日”

EN

回答 1

Stack Overflow用户

发布于 2017-08-29 19:47:34

如果它只是两种不同的格式,您可以相对容易地在基R中完成它。如果可以有更多的格式,则需要其他方法。

代码语言:javascript
运行
复制
x = c("06/11/2017", "11-Jun-17")
as.Date(x, format = c("%m/%d/%Y", "%d-%b-%y")[1 + grepl(pattern = "\\D{3}", x)])
#[1] "2017-06-11" "2017-06-11"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45946926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档