使用带有yearmon数据的if子句时出错

时间:2017-10-16 11:11:10

标签: r zoo

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

想法是采用不正确年份的数据&gt; 2020年,并将它们恢复到19XX形式。

2 个答案:

答案 0 :(得分:1)

在这里,我们可以使用ifelse并且分配部分也不会工作

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

答案 1 :(得分:1)

动物园的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"

这不需要润滑,或任何格式转换等。