【问题标题】:Extract year from date string in this format Dec-06, Jan-90, Feb-76 etc in R在 R 中以 Dec-06、Jan-90、Feb-76 等格式从日期字符串中提取年份
【发布时间】:2017-04-05 15:40:35
【问题描述】:

我在 R 中有一个数据框。它有一列包含格式为 Dec-06、Jan-90、Feb-76 等的日期。它们是字符串。如何以这种格式提取年份部分:2006、1990、1976 等?我想丢弃月份段并将其视为年份部分的距离,并将此列视为逻辑回归的连续变量。

我尝试了 R 中提供的几个日期格式包,如 POSIX、lubridate 等,但无法提取。

有什么想法吗?

【问题讨论】:

    标签: r date


    【解决方案1】:
    format(as.Date(gsub(".*-","","Dec-06"), format = "%y"), "%Y")
    #[1] "2006"
    

    library(lubridate)
    format(myd(paste("Dec-06","-01",sep="")), "%Y")
    #[1] "2006"
    

    【讨论】:

    • format(myd(paste("Dec-06","-01",sep="")), "%Y") 有效。不是前一个。谢谢。
    【解决方案2】:

    我们将字符串转换为Date 类,然后从中仅提取年份。

    format(as.Date(paste0("01-", x), "%d-%b-%y"), "%Y")
    
    #[1] "2006" "1990" "1976"
    

    数据

    x <- c("Dec-06", "Jan-90", "Feb-76 ")
    

    【讨论】:

      【解决方案3】:

      使用lubridate,很简单,年份函数是lubridate的一部分:

      library(lubridate)
      dat <- data.frame(x=c("Mar-06","Jan-90","May-76"))
      dat$date <- as.POSIXlt(paste0("01-",tolower(dat$x)),format="%d-%b-%y",origin="1970-01-01")
      dat$year <- year(dat$date)
      

      答案:

      > dat
             x       date year
      1 Mar-06 2006-03-01 2006
      2 Jan-90 1990-01-01 1990
      3 May-76 1976-05-01 1976
      

      【讨论】:

        【解决方案4】:

        这是zoo的另一个选项

        library(zoo)
        data.table::year(as.yearmon("Dec-06", "%b-%y"))
        #[1] 2006
        

        或者正如@G.Grothendieck 提到的,as.integer 返回year

        as.integer(as.yearmon("Dec-06", "%b-%y"))
        #[1] 2006
        

        【讨论】:

        • 目前尚不清楚year 的来源,但您可以使用as.integer 代替它以避免进一步的依赖。
        猜你喜欢
        • 2014-01-25
        • 1970-01-01
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 2020-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        相关资源
        最近更新 更多