什么是“标准明确日期"? R中字符串到日期转换的格式? [英] What are the "standard unambiguous date" formats for string-to-date conversion in R?

查看:272
本文介绍了什么是“标准明确日期"? R中字符串到日期转换的格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下内容

$ R --vanilla

> as.Date("01 Jan 2000")
Error in charToDate(x) :
    character string is not in a standard unambiguous format

但是该日期显然是 以标准的明确格式.为什么会显示错误消息?

But that date clearly is in a standard unambiguous format. Why the error message?

更糟糕的是,一个模棱两可的日期显然没有任何警告或错误就被接受,然后被错误地读取!

Worse, an ambiguous date is apparently accepted without warning or error and then read incorrectly!

> as.Date("01/01/2000")
[1] "0001-01-20"

我已经在[R]标记中搜索并找到了包含此错误消息的28个其他问题.所有解决方案和解决方法都涉及指定iiuc格式.这个问题的不同之处在于,我要问的是,标准明确格式在哪里定义,并且可以更改它们吗?每个人都收到这些消息还是仅仅是我?也许与语言环境有关?

I've searched and found 28 other questions in the [R] tag containing this error message. All with solutions and workarounds involving specifying the format, iiuc. This question is different in that I'm asking where are the standard unambiguous formats defined anyway, and can they be changed? Does everyone get these messages or is it just me? Perhaps it is locale related?

换句话说,有没有比指定格式更好的解决方案?

In other words, is there a better solution than needing to specify the format?

29个包含"[R]标准明确格式"的问题

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

推荐答案

这是记录的行为.来自?as.Date:

This is documented behavior. From ?as.Date:

format:字符串.如果未指定,它将尝试 在第一个非'NA'元素上依次是%Y-%m-%d"和"%Y/%m/%d", 并给出错误提示(如果两者均无效).

format: A character string. If not specified, it will try '"%Y-%m-%d"' then '"%Y/%m/%d"' on the first non-'NA' element, and give an error if neither works.

as.Date("01 Jan 2000")会产生错误,因为格式不是上面列出的两种格式之一. as.Date("01/01/2000")产生错误的答案,因为日期不是上面列出的两种格式之一.

as.Date("01 Jan 2000") yields an error because the format isn't one of the two listed above. as.Date("01/01/2000") yields an incorrect answer because the date isn't in one of the two formats listed above.

我用标准明确"来表示"ISO-8601"(尽管as.Date并不那么严格,因为%m/%d/%Y"不是ISO-8601).

I take "standard unambiguous" to mean "ISO-8601" (even though as.Date isn't that strict, as "%m/%d/%Y" isn't ISO-8601).

如果收到此错误,解决方案是使用?strptime中所述的格式指定日期(或日期时间)所采用的格式.如果您的数据包含日期/月份的名称和/或缩写,请务必格外小心,因为转换将取决于您的语言环境(请参见?strptime中的示例并阅读?LC_TIME).

If you receive this error, the solution is to specify the format your date (or datetimes) are in, using the formats described in ?strptime. Be sure to use particular care if your data contain day/month names and/or abbreviations, as the conversion will depend on your locale (see the examples in ?strptime and read ?LC_TIME).

这篇关于什么是“标准明确日期"? R中字符串到日期转换的格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆