日期格式与月份分开

时间:2016-07-15 22:15:01

标签: r

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

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

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

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

4 个答案:

答案 0 :(得分:4)

你可以这样做:

rbind(floor(l/100), l%%100)

#     [,1] [,2] [,3] [,4]
#[1,] 2001 2001 2001 2001
#[2,]    1    2    3    4

答案 1 :(得分:3)

这样可行:

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

答案 2 :(得分: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

答案 3 :(得分:1)

我们可以使用strsplit

中的base R
 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