我正在处理一个面板数据集,但日期被写为“年+ m +月数”。举例来说:
"1999M1", "1999M2", "1999M3", "1999M4", "1999M5"
相当于1999年1月、1999年2月、1999年3月等。我想把它们转换成日期格式。
wgeznvg71#
我们可以粘贴-01上的日期,然后在as.Date()中指定适当的格式:
-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"
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
tidyverse
lubridate::ym(x)
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"
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
4条答案
按热度按时间wgeznvg71#
我们可以粘贴
-01
上的日期,然后在as.Date()
中指定适当的格式:qrjkbowd2#
或者使用
lubridate
,它也是tidyverse
的一部分,它支持这种格式,所以我们可以简单地这样做:d6kp6zgx3#
你可以尝试
或
8dtrkrch4#
或者请尝试
创建于2023-09-19带有reprex v2.0.2