guess_formats + R + lubridate

15

我不太理解如何使用lubridate中的guess_formats函数。我有一组日期,它们以某种未知的格式或顺序存在。我想将它们转换为Date对象(至少尽可能地转换)。以下是我尝试过的代码:

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。我不明白以下代码为什么对于这个例子可以工作:

parse_date_time(sampleDates,
            orders = c("Ymd", "mdY"),
            locale = "eng")

但这样做不会:

parse_date_time(sampleDates,
            orders = c("mdY", "Ydm"),
            locale = "eng")

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

双重编辑:嗯,好的,我发现在第一个parse_date_time示例中有Ymd,在第二个示例中有Ydm...继续进行。

2个回答

18

无需调用guess_formats,只需使用parse_date_time

 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


0
一个通用的选项,可以很好地匹配日期格式的是anytime包:
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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接