假设我有这个包含年份和月份的列表:
l <- c(200101, 200102 ,200103, 200104)
我想将它们分开,以便我可以进入2
单独的列表。
这是我没有运气的做法:
as.Date(l,"%Y%m",format = "%Y")
答案 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