将 if 子句与 yearmon 数据一起使用时出错

Error using if clause with yearmon data

library(zoo)
library(lubridate)
yearmon <- as.yearmon(c("01-10", "02-15", "03-30"), "%m-%y")
for (i in yearmon) {
if (year(yearmon[i]) > 2020) {
year(yearmon[i]) <- year(yearmon[i]) - 100
}}

Error in if (year(yearmona[i]) > 2020) { : 
missing value where TRUE/FALSE needed

我们的想法是获取不正确年份 > 2020 的数据,并将它们恢复为 19XX 格式。

在这里,我们可以使用一个 ifelse 并且赋值部分将不起作用

as.yearmon(paste(format(yearmon, "%b"), 
     ifelse(year(yearmon) > 2020, year(yearmon)-100, year(yearmon))))
#[1] "Jan 2010" "Feb 2015" "Mar 1930"

Zoo 的 yearmon 对象是年 + 小数年,因此您可以从 2020 年以上的任何内容中减去 100:

> yearmon <- as.yearmon(c("01-10", "02-15", "03-30"), "%m-%y")
> yearmon
[1] "Jan 2010" "Feb 2015" "Mar 2030"
> yearmon[yearmon > 2020] = yearmon[yearmon > 2020] - 100
> yearmon
[1] "Jan 2010" "Feb 2015" "Mar 1930"

这不需要 lubridate 或任何格式转换等。