r:将字符串转换为日期

La *_*ale -6 r as.date

我有一个这样的字符串:

201601 
201603 
201604 
201606 
201501
Run Code Online (Sandbox Code Playgroud)

我想转换为Date,就像这样:

2016-01
2016-03
2016-04
2016-06
2015-01
Run Code Online (Sandbox Code Playgroud)

我试过了:df$month_key=as.Date(df$month_key,format="YYYYmm") 但它要求原点,我们不需要关心它.有没有办法做到这一点,或者可能在整个列中的字符4和5之间添加一个短划线?谢谢

akr*_*run 7

我们可以sub用来创建-前4个字符和下2个字符之间的匹配.匹配四个字符(.{4}),将它放在一个捕获组((...))中,然后是另一个捕获组中的后两个字符,用它们的后向引用替换它们组(\\1,\\2)和我们之间添加-.

df1$Col <- sub('(.{4})(.{2})', "\\1-\\2", df1$month_key)
df1$Col
#[1] "2016-01" "2016-03" "2016-04" "2016-06" "2015-01"
Run Code Online (Sandbox Code Playgroud)

另一种选择是 substr/paste

with(df1, paste(substr(month_key, 1,4), substr(month_key, 5, 6), sep="-"))
Run Code Online (Sandbox Code Playgroud)

但是,Date课程也有一天.因此,要将原始列转换为"日期",我们可以随时附加,也许使用01并使用格式as.Date

as.Date(paste0(df1$month_key, "01"), "%Y%m%d")
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- structure(list(Col = c(201601L, 201603L, 201604L, 201606L, 201501L
 )), .Names = "month_key", class = "data.frame", row.names = c(NA, -5L))
Run Code Online (Sandbox Code Playgroud)