【问题标题】:Convert months mmm to numeric将月份 mmm 转换为数字
【发布时间】:2011-07-01 14:23:55
【问题描述】:

我得到了一个 csv,其中有一列称为月作为字符变量,其中包含月份的前三个字母。例如:

"Jan", "Feb","Mar",..."Dec"

有没有办法将它转换为月份的数字表示形式,1 到 12,甚至是日期格式的类型?

【问题讨论】:

  • 加分:如果您的月份缩写不是英文,请给出有效的答案! (例如,“Jan”、“Fev”、“Mar”、“Avr”、“Mai”,...)[提示:您可以通过临时切换系统区域设置并使用 as.Date%b 来完成此操作格式...]

标签: r datetime


【解决方案1】:

只需添加到现有答案和问题中的评论:

readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))

结果日期格式"2018-12-20"locale("pt")是葡萄牙语,在巴西使用,"es"是西班牙语,"fr"是法语等等。

【讨论】:

    【解决方案2】:

    使用match 和预定义向量month.abb

    tst <- c("Jan","Mar","Dec")
    match(tst,month.abb)
    [1]  1  3 12
    

    【讨论】:

      【解决方案3】:

      转换为数字时可以使用内置向量month.abb进行检查,例如:

      mm <- c("Jan","Dec","jan","Mar","Apr")
      
      sapply(mm,function(x) grep(paste("(?i)",x,sep=""),month.abb))
      Jan Dec jan Mar Apr 
        1  12   1   3   4 
      

      grep 结构处理大小写的差异。如果不需要,

      match(mm,month.abb) 
      

      效果一样好。

      如果您还有日期和年份列,则可以使用任何转换函数,使用适当的代码(另请参阅 ?strftime

      例如

      mm <- c("Jan","Dec","jan","Mar","Apr")
      year <- c(1998,1998,1999,1999,1999)
      day <- c(4,10,3,16,25)
      
      dates <- paste(year,mm,day,sep="-")
      
      strptime(dates,format="%Y-%b-%d")
      [1] "1998-01-04" "1998-12-10" "1999-01-03" "1999-03-16" "1999-04-25"
      

      【讨论】:

      • 谢谢 Joris,这也很有用。我将不得不粘贴该列以获取时间序列的实际日期。
      【解决方案4】:

      几个选项使用:

      vec <- c("Jan","Dec","Jan","Apr")
      

      > Months <- 1:12
      > names(Months) <- month.abb
      > unname(Months[vec])
      [1]  1 12  1  4
      

      和/或

      > match(vec, month.abb)
      [1]  1 12  1  4
      

      【讨论】:

        猜你喜欢
        • 2014-03-30
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多