Преобразование локализованной даты вида 12-okt-2007

Я импортировал временной ряд с датами следующего формата:

 test = c("11-Feb-01","12-Feb-01","01-Mai-08")

Это дает:

> as.Date(test, "%d-%b-%y")
[1] NA           NA           "2008-05-01"

Поскольку май был переведен, он, очевидно, учитывает локаль.

Согласно документам, %b должно быть сокращенным названием месяца, но я предполагаю, что здесь может быть какая-то проблема.

Как мне это исправить?

Я запускаю R под Linux t2.6.27-9-generic #1 SMP


Обновление: Копнув немного глубже, я обнаружил, что проблема заключается в определении LC_TIME, где соответствующие сокращения имеют форму:

"jan.","feb.","mars", "apr", "mai", "juni", "juli", "aug.","sep.","okt.","nov.", "des."

в то время как мои данные содержат:

"Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"

Думаю, я мог бы рассмотреть возможность предварительной обработки данных, но гладкий способ сделать это в R был бы очень кстати.


Это работает вроде, но не так элегантно:

> as.Date(gsub("Feb","feb.",test), "%d-%b-%y")
[1] "2001-02-11" "2008-02-12" "2008-05-01"

Спасибо!


person tovare    schedule 24.01.2009    source источник


Ответы (1)


Самое близкое решение, которое я нашел для решения, - это сделать несколько итераций по данным, чтобы заменить названия месяцев чем-то, что можно проанализировать.

Я не уверен, что это лучшее решение.

setwd("/home/tovare/Data")

v <- read.csv2("valuta_dag.sdv", 
  na.strings = c("NA","ND"), 
  header = TRUE, sep=";", skip=2)

v$Dato <- gsub("Jan","01",v$Dato)
v$Dato <- gsub("Feb","02",v$Dato)
v$Dato <- gsub("Mar","03",v$Dato)
v$Dato <- gsub("Apr","04",v$Dato)
v$Dato <- gsub("Mai","05",v$Dato)
v$Dato <- gsub("Jun","06",v$Dato)
v$Dato <- gsub("Jul","07",v$Dato)
v$Dato <- gsub("Aug","08",v$Dato)
v$Dato <- gsub("Sep","09",v$Dato)
v$Dato <- gsub("Okt","10",v$Dato)
v$Dato <- gsub("Nov","11",v$Dato)
v$Dato <- gsub("Des","12",v$Dato)

v$Dato <- as.Date(v$Dato,"%d-%m-%y")
person tovare    schedule 24.01.2009
comment
Я думаю, вы правы. Вы можете либо изменить определения LC_TIME, либо изменить свои данные. Я большой поклонник того, чтобы не возиться с LC_TIME, если нет другого обходного пути. У вас есть альтернатива растлению LC_TIME, поэтому я бы использовал ее. - person JD Long; 25.01.2009