Преобразовать сокращение месяца в числовой месяц в R - PullRequest
19 голосов
/ 08 августа 2011

Я пытаюсь написать функцию для преобразования трехбуквенных абзацев месяца в числовые значения в 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'))

Ответы [ 2 ]

32 голосов
/ 08 августа 2011

Поскольку 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. Этот подход требует запоминания того, что номер месяца основан на 0, поэтому вам нужно добавить 1 в этом случае.

6 голосов
/ 08 августа 2011

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

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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...