Подтвердить что ты не робот

Преобразование аббревиатуры месяца в числовой месяц, в R

Я пытаюсь написать функцию для преобразования аббревиатур в течение трех букв в числовые значения в R.

Вот что у меня есть, мне было интересно, есть ли лучший способ сделать это:

numMonth <- function(x) {
    months <- list(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12)
    x <- tolower(x)
    sapply(x,function(x) months[[x]])
}

numMonth(c('JAN','DEC'))
4b9b3361

Ответ 1

Так как month.abb - системная константа, почему бы не использовать:

 match("jan", tolower(month.abb))
 # [1] 1

 mo2Num <- function(x) match(tolower(x), tolower(month.abb))
 mo2Num(c("jan", "JAN", "Feb", "junk")  )
 #[1]  1  1  2 NA

Если вы хотите увидеть остальную часть относительно небольшого числа "системных констант", перейдите к

`?Constants`

В тексте примера подразумевается, что они должны быть на языке, связанном с вашей локалью (хотя я не могу сказать с полномочиями, какие из локалей были бы такими. Альтернативный подход мог заключаться в том, чтобы извлечь номер месяца после преобразования в POSIXlt-object. Этот подход требует запоминания того, что номер месяца os 0, поэтому вам нужно добавить 1 в этот экземпляр.

Ответ 2

Использование векторизации, т.е.:

numMonth<-function(x) 
c(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12)[tolower(x)]