要生成下面的输出,我使用以下代码:
safe.ifelse <- function(cond, yes, no) 结构(ifelse(cond, yes, no), class = class(yes))
图书馆(润滑)
df <- data.frame(i_date=mdy("9/1/2011") + 月(seq(0,31)), t_date=mdy("2/1/2012")) r <- seq(1: nrow(df))
r <- (r - 其中(df$i_date == df$t_date)) %/% 12
df$r_date <- as.Date(safe.ifelse(r<0, df$i_date, df$t_date + years(r)), origin = "1970-01-01")
有充分的理由,如果我将 t_date 设置为超出最大 i_date,我会收到错误消息。有谁知道避免这个错误的方法?因此,与其查找 i_date 和 t_date 匹配的位置、将 t_date 复制 12 次并添加一年、再次复制 12 次等,我只需将 i_date 一直级联到 r_date 的末尾,其中数据框的所有三列有相同的长度。因此,在我所指的情况下,如果 t_date > max(i_date),则 i_date 将与 t_date 匹配,否则我们将执行下面看到的操作。谢谢!
i_date t_date r_date
9/1/2011 2/1/2012 9/1/2011
10/1/2011 2/1/2012 10/1/2011
11/1/2011 2/1/2012 11/1/2011
12/1/2011 2/1/2012 12/1/2011
1/1/2012 2/1/2012 1/1/2012
2/1/2012 2/1/2012 2/1/2012
3/1/2012 2/1/2012 2/1/2012
4/1/2012 2/1/2012 2/1/2012
5/1/2012 2/1/2012 2/1/2012
6/1/2012 2/1/2012 2/1/2012
7/1/2012 2/1/2012 2/1/2012
8/1/2012 2/1/2012 2/1/2012
9/1/2012 2/1/2012 2/1/2012
10/1/2012 2/1/2012 2/1/2012
11/1/2012 2/1/2012 2/1/2012
12/1/2012 2/1/2012 2/1/2012
1/1/2013 2/1/2012 2/1/2012
2/1/2013 2/1/2012 2/1/2013
3/1/2013 2/1/2012 2/1/2013
4/1/2013 2/1/2012 2/1/2013
5/1/2013 2/1/2012 2/1/2013
6/1/2013 2/1/2012 2/1/2013
7/1/2013 2/1/2012 2/1/2013
8/1/2013 2/1/2012 2/1/2013
9/1/2013 2/1/2012 2/1/2013
10/1/2013 2/1/2012 2/1/2013
11/1/2013 2/1/2012 2/1/2013
12/1/2013 2/1/2012 2/1/2013
1/1/2014 2/1/2012 2/1/2013
2/1/2014 2/1/2012 2/1/2014
3/1/2014 2/1/2012 2/1/2014
4/1/2014 2/1/2012 2/1/2014