【发布时间】:2013-01-23 04:57:55
【问题描述】:
请考虑以下事项
$ R --vanilla
> as.Date("01 Jan 2000")
Error in charToDate(x) :
character string is not in a standard unambiguous format
但是那个日期显然是在一个标准的明确格式。为什么会出现错误消息?
更糟糕的是,一个模棱两可的日期显然被接受而没有警告或错误,然后读取不正确!
> as.Date("01/01/2000")
[1] "0001-01-20"
我在包含此错误消息的 [R] 标记中搜索并发现了 28 个其他问题。所有解决方案和解决方法都涉及指定格式 iiuc。这个问题的不同之处在于我问的是标准的明确格式在哪里定义,它们可以改变吗?每个人都收到这些消息还是只有我一个人?也许它与语言环境有关?
也就是说,有没有比需要指定格式更好的解决方案?
29 questions containing "[R] standard unambiguous format"
> 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.character的函数定义来看,输入只测试了"%Y-%m-%d"和"%Y/%m/%d"这两种格式。如果它可以匹配其中之一,它似乎被认为是“明确的”。 -
@CarlWitthoft “我读过吗”似乎暗示答案在
?as.Date中显而易见。它对这有什么帮助? -
可以说“1949 年 1 月 24 日”和“1949 年 1 月 24 日”是明确的,但它们肯定是以盎格鲁为中心的。然而,“month.abb”也有一些以盎格鲁为中心的值,因此可以在以下情况下匹配这些值:
strptime(xx, f <- "%d $B %Y", tz = "GMT")或strptime(xx, f <- "%B $d %Y", tz = "GMT")返回值。 (我并不是说month.abb用于匹配 %B,因为文档说匹配是特定于语言环境的。) -
@CarlWitthoft 我们中的一些人时不时地绊倒。谢谢你在我情绪低落时的一脚。在这个问题中,我做了很多正确的事情:我包含了 sessionInfo(),我搜索了,告诉你我搜索了什么并包含了一个链接,我尽可能地保持简洁。我错过了 ?as.Date 中的一行,你给了我 TFM 治疗。我们不可能一直都像你一样完美。
-
@MatthewDowle 对不起,如果我摔倒了。我认为,当您似乎将“对受过良好教育的人毫不含糊”与“对于可怜无助的一段代码毫不含糊”混为一谈时,这种狂热就开始了。 :-(
标签: r date date-formatting strptime as.date