通过在OSX上解析法语日期的神秘错误

时间:2013-07-25 11:13:14

标签: r date

我有一个日期为法语的字符向量。我想将它们转换为R中的日期格式。它似乎有效,但有一些神秘的错误。例如,R承认“30 juin 2012”而不是“30 juillet 2012”:

> as.Date("30 juin 2012", format = "%d %B %Y")
[1] "2012-06-30"
> as.Date("28 février 2012", format = "%d %B %Y")
[1] "2012-02-28"
> as.Date("30 juillet 2012", format = "%d %B %Y")
[1] NA

你有任何解释吗?

PS:我的本地设置是法语UTF8

> Sys.getlocale()
[1] "fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/fr_FR.UTF-8/fr_FR.UTF-8"

4 个答案:

答案 0 :(得分:7)

我真的没有解释,但我确实有一个解决方案。使用“,”而不是“。”与德语数字有类似的问题。对于小数和一些不同的写日期方式也是如此。以下是我通常对数据格式不正确的数据:

a<-"30 juillet 2012"

b<-gsub(pattern="juillet", a, replacement="july")

as.Date(b, format="%d %B %Y")
[1] "2012-07-30"

希望这会帮助你。如果“7月”在您的系统上不起作用,您可以随时将其替换为7.如此

a<-"30 juillet 2012"
b<-gsub(pattern="juillet", a, replacement="/ 7 /")
b<-gsub(pattern="|| ", b, replacement="")
as.Date(b, format= "%d/%m/%Y")

问候,本

答案 1 :(得分:6)

正如GSee所说,这是一个语言环境问题。使用Sys.setlocale将您的语言环境设置为法语,您的代码示例运行正常。

在Linux下(我认为OS X也没有测试过):

Sys.setlocale(locale="fr_FR")

在Windows下:

Sys.setlocale(locale="French_France")

GSee评论中的UTF-8是字符编码,是可选的。有关详细信息,请参阅?iconvlist

答案 2 :(得分:4)

(回答“为什么?”和“如何回答”已经发布。所以这将留下似乎是“深层”的解释,即使它不是OSX上的补丁。它是一个OSX中的错误,而不是R。)

尽管将我的语言环境(也在Mac上)设置为“fr_FR”,但LC_TIME设置仍为“en_US”

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
> Sys.setlocale(locale="fr_FR") # Should have category="LC_ALL"
[1] "fr_FR/fr_FR/fr_FR/C/fr_FR/en_US.UTF-8"
> month.abb
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> month.name
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"     
 [8] "August"    "September" "October"   "November"  "December" 

在阅读了有关lubridate的Github错误之后,我似乎没有报告任何新内容。我想,Mac有这个bug。帮助页面说'month.abb'和'month.name'值应该用作引用,但是更改它们也是无效的。 (或许它们在Startup上阅读?)已在SIG-R-Mac上报告过:http://markmail.org/search/?q=+list%3Aorg.r-project.r-sig-mac+french+locale#query:%20list%3Aorg.r-project.r-sig-mac%20french%20locale+page:1+mid:oie7r5qksadmzjia+state:results

然后进一步阅读我们发现该错误是在OSX中并且已经存在了一段时间: http://lists.freebsd.org/pipermail/freebsd-bugs/2009-December/037796.html

我只在Lion上,但现在很快就会更新到Mavericks。

答案 3 :(得分:4)

关于“OSX strptime juillet”的一些谷歌搜索引起了Peter Dalgaard的评论http://grokbase.com/t/r/r-sig-mac/12696r26eh/as-date-does-not-work-with-format-b

  

看起来像是

     

http://lists.freebsd.org/pipermail/freebsd-bugs/2009-December/037796.html

     

于2010年5月修复,但显然没有渗透到   OSX更新了。 (仍然存在于Lion的本地构建中,所以不仅如此   CRAN二进制文件。插入关于Open Source和的适当的咆哮   这里的商业供应商......)

     

错误摘要:带有%B的strptime经历了几个月的检查   全名,然后是缩写。问题是“juillet”的“jui”   匹配abbr。为“juin”!但“llet”错配%Y,我们得到了NA。

所以这是一个在OSX中持续存在的BSD错误。

看起来你将不得不使用类似@Ben K的解决方案来解决这个问题。 (对不起。)