R 创建统一的时间序列,日期来自不同的(自然)语言

R 创建统一的时间序列,日期来自不同的(自然)语言,r,time-series,R,Time Series,我正在使用as.Date函数,如下所示: x$time_date <- as.Date(x$time_date, format = "%H:%M - %d %b %Y") 这看起来很有用,但我不确定如何为“未识别”格式实现它: 我试图通过使用gsub来替换德国月份发生的所有事件,但运气不佳x下面是数据表,我只处理time\u date列: x$time_date <- gsub("(März)?", "Mar", x$time_date) %>% gsub

我正在使用
as.Date
函数,如下所示:

x$time_date <- as.Date(x$time_date, format = "%H:%M - %d %b %Y")
这看起来很有用,但我不确定如何为“未识别”格式实现它:

我试图通过使用gsub来替换德国月份发生的所有事件,但运气不佳
x
下面是数据表,我只处理time\u date列:

 x$time_date <- gsub("(März)?", "Mar", x$time_date) %>%
        gsub("(Mai)?", "May", .) %>%
        gsub("(Juni)?", "Jun", .) %>%
        gsub("(Juli)?", "Jul", .) %>%
        gsub("(Okt)?", "Oct", .) %>%
        gsub("(Dez)?", "Dec", .)
x$time\u date%
gsub(“Mai”),“May”,)%>%
gsub(“(Juni)”,“Jun”,)%>%
gsub(“(朱莉)”,“七月”,)%>%
gsub(“(Okt)”,“十月”,)%>%
gsub(“Dez”),“Dec”,)
这不仅不起作用,而且是一个非常缓慢的过程,我有将近20GB的纯.csv文件要处理

中提到了不同的地区/语言,但没有提到如何同时使用多个地区/语言。我还找到了关于如何执行的说明,但是我的数据是混合的,所以我只能为每个文件使用正确的语言来执行条件循环,但是这也会很慢


有没有我找不到的已知解决方法

创建一个包含所有翻译的表
选项卡
,然后使用订阅实际执行翻译。如果您的输入缩写与生成的标准缩写相同,但精确的语言名称(“德语”等)可能因您的系统而异,那么下面的代码似乎在Windows上对我有效。有关更多信息,请参见
?Sys.setlocale
。此外,如果您输入的缩写与此处生成的缩写不同,您必须自己将其添加到
选项卡
中,例如
选项卡这是一个很好的解决方案,但它对我来说不是100%。我从您的代码中得到的输出是
[1]NA“2014年5月18:00-10日”
。我在Mac OS上使用了langs=
c(“de_de”,“c”)
。我还尝试了c(“de_de”、“en_GB”)和许多其他变体,但没有比上面显示的输出更好的了。我的Sys.setlocale()是“C”。你知道为什么它只对测试向量中的第二个值起作用吗?t似乎是
Juli
的问题-其他月份,如
Okt
Dez
按预期翻译。我只能认为原因是因为他们有四个字母,而你用
month.aab
指定了三个字母的缩写。我试图用
März
来测试这一点,但这表明umlauts没有得到正确的处理-outpu:
“18:00-10 M\303\244rz 2014”“18:00-2014年5月10日”
道歉,并添加了我自己的作品,但不是为
März
。它无法阅读umlaut。你能想出一个方法来调整你的答案,说“如果这个月以M开头,不是‘May’或‘Mai’,那么就把它改成‘Mar’”?或者其他类似的黑客攻击?将我自己的语言环境更改为德语,即
Sys.setlocale(locale=“de_de”)
允许R使用umlauts,因此我可以使用
选项卡,如果您可以通过更改语言环境使其工作,那么我会这样做,并像在您的注释中那样手动添加缺少的语言环境。我认为这比试图获得一般规则要简单得多,如果你需要匹配更多的语言,这些规则可能会失败。
 x$time_date <- gsub("(März)?", "Mar", x$time_date) %>%
        gsub("(Mai)?", "May", .) %>%
        gsub("(Juni)?", "Jun", .) %>%
        gsub("(Juli)?", "Jul", .) %>%
        gsub("(Okt)?", "Oct", .) %>%
        gsub("(Dez)?", "Dec", .)
langs <- c("French", "German", "English")
tab <- unlist(lapply(langs, function(lang) {
  Sys.setlocale("LC_TIME", lang)
  nms <- format(ISOdate(2000, 1:12, 1), "%b")
  setNames(month.abb, nms)
}))

x <- c("18:00 - 10 Juli 2014", "18:00 - 10 Mai 2014") # test input

source_month <- gsub("[^[:alpha:]]", "", x)
mapply(sub, source_month, tab[source_month], x, USE.NAMES = FALSE)
[1] "18:00 - 10 Jul 2014" "18:00 - 10 May 2014"