【问题标题】:Convert a month abbreviation to a numeric month, in R在 R 中将月份缩写转换为数字月份
【发布时间】:2014-09-16 23:42:19
【问题描述】:

我正在尝试编写一个函数来将 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'))

【问题讨论】:

    标签: r datetime


    【解决方案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`
    

    示例文本暗示这些应该使用与您的语言环境相关联的语言(尽管我无法权威地说明会是哪种语言环境。另一种方法可能是在转换为 a 后提取月份编号POSIXlt-object。这种方法需要记住月份编号是从 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)]
      

      【讨论】:

        猜你喜欢
        • 2014-03-30
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-09
        • 1970-01-01
        • 2012-11-26
        相关资源
        最近更新 更多