11

我有一个带有法语日期的字符向量。我想将它们转换为 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

4 回答 4

7

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

a<-"30 juillet 2012"

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

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

希望这可以帮助你。如果“七月”在您的系统上不起作用,您总是可以用 7 替换它。像这样

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

问候,本

于 2013-07-25T11:35:12.560 回答
6

As GSee said, it's a locale issue. Set your locale to French using Sys.setlocale and your code example runs OK.

Under Linux (I think OS X too, but not tested):

Sys.setlocale(locale="fr_FR")

Under Windows:

Sys.setlocale(locale="French_France")

The UTF-8in GSee's comment is the character encoding, and is optional. See ?iconvlist for more info.

于 2013-07-25T12:31:12.017 回答
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 二进制文件。在此处插入有关开源和商业供应商的适当咆哮......)

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

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

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

于 2013-11-05T19:42:17.240 回答
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有这个错误。帮助页面说“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。

于 2013-11-05T19:17:23.630 回答