将月份缩写转换为数字月份,在R中

时间:2011-08-08 19:28:08

标签: r datetime

我正在尝试编写一个函数,将3个字母的月份缩写转换为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 个答案:

答案 0 :(得分:32)

由于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。

答案 1 :(得分:6)

使用矢量化,即:

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)]