2016-07-15 46 views
0

假設我有一個包含年份和月份這個名單:單獨一年的日期格式

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

我想將它們分開,這樣我可以有再進2單獨的列表。 這裏是我做的,沒有運氣:

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

回答

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 
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

你可以這樣做:

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

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

我們可以使用strsplitbase 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