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

Zac*_*ach 20 datetime r

我正在尝试编写一个函数来将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'))
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 33

由于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
Run Code Online (Sandbox Code Playgroud)

如果你想看到相对较少数量的"系统常量"的其余部分,请转到

`?Constants`
Run Code Online (Sandbox Code Playgroud)

示例文本暗示这些应该是与您的语言环境相关联的语言(尽管我无法用权限说明哪些语言环境可能会出现.另一种方法可能是在转换为POSIXlt对象后提取月数量)这种方法需要记住月号os 0,所以你需要在这个例子中加1.


mbq*_*mbq 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)]
Run Code Online (Sandbox Code Playgroud)