我有一个日期为法语的字符向量。我想将它们转换为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"
答案 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的解决方案来解决这个问题。 (对不起。)