假設我有一個包含年份和月份這個名單:單獨一年的日期格式
l <- c(200101, 200102 ,200103, 200104)
我想將它們分開,這樣我可以有再進2
單獨的列表。 這裏是我做的,沒有運氣:
as.Date(l,"%Y%m",format = "%Y")
假設我有一個包含年份和月份這個名單:單獨一年的日期格式
l <- c(200101, 200102 ,200103, 200104)
我想將它們分開,這樣我可以有再進2
單獨的列表。 這裏是我做的,沒有運氣:
as.Date(l,"%Y%m",format = "%Y")
這會工作:
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
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
你可以這樣做:
rbind(floor(l/100), l%%100)
# [,1] [,2] [,3] [,4]
#[1,] 2001 2001 2001 2001
#[2,] 1 2 3 4
我們可以使用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