我的示例开始:
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
以1
结尾而yr_max
以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
答案 0 :(得分:3)
我建议您在计算中使用真实日期。这使我们能够利用基数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"
或者,为您的 exact 输出:
sub("(?<=\\d{4}).", "", format(y, "%Y%m"), perl=TRUE)
[1] "20183" "20185" "20191" "20193"
答案 1 :(得分:2)
1)生成年份的整个序列,然后import {Component, NgModule, OnInit, OnChanges, SimpleChanges, Input } from '@angular/core'
@Component({
selector: 'example',
template: `
<input [(ngModel)]='name' (ngModelChange)="onChanges()" />
`,
})
export class Example implements OnInit{
private _value: string;
name: string;
// @Input() name: string; <--- no need
constructor() {
}
ngOnInit() {
this.name = 'qwe';
}
onChanges() {
console.log(this.name);
}
}
取出不是1,3,5模10的任何东西。
Filter()
rem_135_mod10 <- function(x) { (x %% 10) %in% c(1,3,5) }
Filter(rem_135_mod10, seq(yr_min, yr_max))
# 20181 20183 20185 20191 20193 20195
或2)生成基数为20180、20190 ...的基数序列,并自己添加偏移量1,3,5。相同。
答案 2 :(得分:0)
预定义数据:
end_vec <- c(1, 3, 5)
yr_min <- 20183
yr_max <- 20193
代码:
ans<-
c(
sapply(c(yr_min, yr_max), function(x) {n<-nchar(x);as.numeric(paste0(substr(x,1,n-1),end_vec))})
)
ans[dplyr::between(ans, yr_min, yr_max)]
结果:
# [1] 20183 20185 20191 20193