首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >guess_formats +R+ lubridate

guess_formats +R+ lubridate
EN

Stack Overflow用户
提问于 2014-09-26 16:37:23
回答 2查看 2.7K关注 0票数 15

我很难理解如何在lubridate中使用guess_formats函数。我有一个日期向量,以某种未知的格式集/顺序表示。我希望将它们转换为Date对象(或者至少尽可能多地转换)。下面的代码是我尝试过的:

代码语言:javascript
复制
library(lubridate)
sampleDates <- c("4/6/2004","4/6/2004","4/6/2004","4/7/2004",
        "4/6/2004","4/7/2004","2014-06-28","2014-06-30","2014-07-12",
        "2014-07-29","2014-07-29","2014-08-12")
formats <- guess_formats(sampleDates, c("Ymd", "mdY"))
dates <- as.Date(sampleDates, format=formats)

这给了所有的NA。

这显然只是一个简短的例子。在实际情况下,我不知道各种格式散落在哪里,我也不能100%确定只有%m/%d/%Y和%Y-%m-%d。有人能让我知道A.在本例中如何使用guess_formats还是B。在lubridate/base R中是否有更合适的方法,希望没有大量的正则表达式。谢谢!

编辑:我也尝试过parse_date_time。我不明白的是,对于这个示例,有以下工作:

代码语言:javascript
复制
parse_date_time(sampleDates,
            orders = c("Ymd", "mdY"),
            locale = "eng")

但这并不意味着:

代码语言:javascript
复制
parse_date_time(sampleDates,
            orders = c("mdY", "Ydm"),
            locale = "eng")

在我的实际数据集中,我将不知道格式化的顺序,这似乎对此函数很重要。

Double编辑: Dur,好的,我看到我在第一个parse_date_time示例中使用了Ymd,在second...carry上有Ydm。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-26 16:48:08

不需要调用guess_formats,只需使用parse_date_time

代码语言:javascript
复制
 parse_date_time(sampleDates, c("Ymd", "mdY"))

 [1] "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-07 UTC" "2004-04-06 UTC"
 [6] "2004-04-07 UTC" "2014-06-28 UTC" "2014-06-30 UTC" "2014-07-12 UTC" "2014-07-29 UTC"
[11] "2014-07-29 UTC" "2014-08-12 UTC"

在内部,它将调用guess_formats

票数 18
EN

Stack Overflow用户

发布于 2022-02-04 18:02:37

在匹配日期格式方面做得很好的一个通用选项是任何时间包:

代码语言:javascript
复制
library(anytime)

anydate(sampleDates)
[1] "2004-04-06" "2004-04-06" "2004-04-06" "2004-04-07" "2004-04-06" "2004-04-07" "2014-06-28"
[8] "2014-06-30" "2014-07-12" "2014-07-29" "2014-07-29" "2014-08-12"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26064292

复制
相关文章

相似问题

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