R语言 当月份编码为m1,m2,m3,m4.,m12时,将字符串转换为日期

i5desfxk  于 2023-09-27  发布在  其他
关注(0)|答案(4)|浏览(104)

我正在处理一个面板数据集,但日期被写为“年+ m +月数”。举例来说:

"1999M1", "1999M2", "1999M3", "1999M4", "1999M5"

相当于1999年1月、1999年2月、1999年3月等。
我想把它们转换成日期格式。

wgeznvg7

wgeznvg71#

我们可以粘贴-01上的日期,然后在as.Date()中指定适当的格式:

x = c("1999M1", "1999M2", "1999M3", "1999M4", "1999M5")
as.Date(paste0(x, "-01"), format = "%YM%m-%d")
# [1] "1999-01-01" "1999-02-01" "1999-03-01" "1999-04-01" "1999-05-01"
qrjkbowd

qrjkbowd2#

as.Date(sub("(.+)M(.+)", "\\1-\\2-01", x))

# [1] "1999-01-01" "1999-02-01" "1999-03-01" "1999-04-01" "1999-05-01"

或者使用lubridate,它也是tidyverse的一部分,它支持这种格式,所以我们可以简单地这样做:

lubridate::ym(x)
d6kp6zgx

d6kp6zgx3#

你可以尝试

> s <- c("1999M1", "1999M2", "1999M3", "1999M4", "1999M5")

> paste0(sub("M.*","",s),"-",month.abb[as.integer(sub("\\d+M", "", s))])
[1] "1999-Jan" "1999-Feb" "1999-Mar" "1999-Apr" "1999-May

> s <- c("1999M1", "1999M2", "1999M3", "1999M4", "1999M5")

> strftime(as.Date(paste0(s, "-01"), format = "%YM%m-%d"), "%Y-%b")
[1] "1999-Jan" "1999-Feb" "1999-Mar" "1999-Apr" "1999-May"
8dtrkrch

8dtrkrch4#

或者请尝试

dat <- data.frame(date=c("1999M1", "1999M2", "1999M3", "1999M4", "1999M5"))

library(tidyverse)

df <- dat %>% mutate(year=as.numeric(str_extract_all(date,'\\d+(?=\\M)')),
               month=as.numeric(str_extract_all(date,'(?<=\\M)\\d+')),
               newdate=lubridate::ymd(paste(year,month,1,sep = '-'))
               )

创建于2023-09-19带有reprex v2.0.2

date year month    newdate
1 1999M1 1999     1 1999-01-01
2 1999M2 1999     2 1999-02-01
3 1999M3 1999     3 1999-03-01
4 1999M4 1999     4 1999-04-01
5 1999M5 1999     5 1999-05-01

相关问题