【问题标题】:Separate year from month in date format [duplicate]日期格式中的年月分开[重复]
【发布时间】:2016-07-15 22:15:01
【问题描述】:

假设我有这个包含年份和月份的列表:

l <- c(200101, 200102 ,200103, 200104)

我想将它们分开,以便我可以将它们放入 2 单独的列表中。 这是我没有运气的做法:

as.Date(l,"%Y%m",format = "%Y")

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做:

    rbind(floor(l/100), l%%100)
    
    #     [,1] [,2] [,3] [,4]
    #[1,] 2001 2001 2001 2001
    #[2,]    1    2    3    4
    

    【讨论】:

      【解决方案2】:

      这可行:

      year_list<-as.numeric(substr(as.numeric(l),1,4))
      month_list<-as.numeric(substr(as.numeric(l),5,6))
      

      示例 1:

      > l <- c(200101, 200102 ,200103, 200104)
      > l
      [1] 200101 200102 200103 200104
      
      > year_list<-as.numeric(substr(as.numeric(l),1,4))
      > year_list
      [1] 2001 2001 2001 2001
      
      > month_list<-as.numeric(substr(as.numeric(l),5,6))
      > month_list
      [1] 1 2 3 4
      

      示例 2:

      > l <- c(200701, 200802 ,200903, 201604)
      > year_list<-as.numeric(substr(as.numeric(l),1,4))
      > year_list
      [1] 2007 2008 2009 2016
      > month_list<-as.numeric(substr(as.numeric(l),5,6))
      > month_list
      [1] 1 2 3 4
      

      【讨论】:

        【解决方案3】:

        tidyr::separate 可以采用整数位置进行拆分,但它只需要 data.frames。不过,这并不全是坏事,因为无论如何它都是一种不错的输出格式:

        library(tidyr)
        
        data.frame(l = c(200101, 200102 ,200103, 200104)) %>% 
            separate(l, into = c('year', 'month'), sep = 4)
        ##   year month
        ## 1 2001    01
        ## 2 2001    02
        ## 3 2001    03
        ## 4 2001    04
        

        【讨论】:

          【解决方案4】:

          我们可以从base R使用strsplit

           do.call(rbind, lapply(strsplit(as.character(l), 
                            '(?<=.{4})', perl=TRUE), as.numeric))
          

          或另一个base R 选项,通过在字符之间创建分隔符并使用read.csv

          read.csv(text=sub("(.{4})(.{2})", "\\1,\\2", l), header=FALSE, 
                     col.names= c("Year", "Month"))
          #   Year Month
          #1 2001     1
          #2 2001     2
          #3 2001     3
          #4 2001     4
          

          【讨论】:

            猜你喜欢
            • 2014-03-21
            • 1970-01-01
            • 2015-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多