【发布时间】:2021-09-12 17:21:58
【问题描述】:
我在 R 中有一个名为“年周”的列,它显示年度数据和周数据。 202101 代表 2021 年的第一周。但是,我尝试将其格式化为 '01-2021' 或 '2021-01 以将其放入时间序列中。
【问题讨论】:
-
我认为这可以帮助你:stackoverflow.com/questions/45549449/…
我在 R 中有一个名为“年周”的列,它显示年度数据和周数据。 202101 代表 2021 年的第一周。但是,我尝试将其格式化为 '01-2021' 或 '2021-01 以将其放入时间序列中。
【问题讨论】:
1) Base R 假设输入是数字,如下所示,使用 sprintf,如下面的代码所示。没有使用任何包。
x <- 202101
sprintf("%02d-%d", x %% 100, x %/% 100)
## [1] "01-2021"
2) yearmon 另一种方法是将其转换为 yearmon 类,然后对其进行格式化。 x 在上面定义。
library(zoo)
format(as.yearmon(as.character(x), "%Y%m"), "%m-%Y")
## [1] "01-2021"
3) sub 另一种基本方法是
sub("(....)(..)", "\\2-\\1", x)
## [1] "01-2021"
4) read.fwf 另一种基本方法是:
with(read.fwf(textConnection(as.character(x)), colClasses = "character", c(4, 2)),
paste(V2, V1, sep = "-"))
## [1] "01-2021"
【讨论】:
你可以使用gsub:
gsub("(\\d{4})(\\d{2})", "\\2-\\1", 202101)
#R> [1] "01-2021"
【讨论】:
您可以使用 lubridate 中的 my() 函数。这是备忘单:https://raw.githubusercontent.com/rstudio/cheatsheets/master/lubridate.pdf
【讨论】: