r - 给定两个 Year + 1/3/5 整数,生成它们之间的所有 Year + 1/3/5 整数的向量(包括)
问题描述
我从一个例子开始:
yr_min <- 20181
yr_max <- 20195
as.numeric(paste0(rep(
seq(as.numeric(substr(yr_min, 1, 4)),
as.numeric(substr(yr_max, 1, 4))),
each = 3),
c(1, 3, 5)))
[1] 20181 20183 20185 20191 20193 20195
上面的代码有什么问题?它不会概括超出yr_min
以 a 结尾1
和yr_max
以 a 结尾的情况5
。
例如:
yr_min <- 20183
yr_max <- 20193
as.numeric(paste0(rep(
seq(as.numeric(substr(yr_min, 1, 4)),
as.numeric(substr(yr_max, 1, 4))),
each = 3),
c(1, 3, 5)))
[1] 20181 20183 20185 20191 20193 20195
所需的输出是
[1] 20183 20185 20191 20193
解决方案
我建议在您的计算中使用真正的日期。这使我们能够利用 base R 的seq
功能:
x <- seq(as.Date("2018/3/1"), as.Date("2019/3/1"), by="month")
x[format(x, "%m") %in% c("01", "03", "05")]
[1] "2018-03-01" "2018-05-01" "2019-01-01" "2019-03-01"
如果您真的想要您拥有的确切格式,您可以通过另一个调用轻松地做到这一点format
:
y <- x[format(x, "%m") %in% c("01", "03", "05")]
format(y, "%Y%m")
[1] "201803" "201805" "201901" "201903"
或者,对于您的确切输出:
sub("(?<=\\d{4}).", "", format(y, "%Y%m"), perl=TRUE)
[1] "20183" "20185" "20191" "20193"
推荐阅读
- python - tox 环境如何设置它的 sys.path
- python - 如何使用不同的字段作为modelformset的标签?
- c - 无法理解这段代码的工作原理“binaryString[i] = ((number & 1) + '0')”
- wordpress - 将简码添加到店面标题操作
- python - 冻结除输出/logits 之外的所有层
- android - 当我将 ListView 放在列中时,我得到“引发了另一个异常:未布置 RenderBox”
- python-2.7 - 如何从与当前脚本的父目录平行的目录导入 .py 文件?
- ruby - Ruby 的块语法的起源是什么?
- javascript - 在返回的内部函数中访问参数对象
- r - 我可以用一个表达式引用多个正则表达式项吗?