仅将固定天数添加到包含日期

时间:2017-05-12 11:23:47

标签: r date dataframe

我有一个data.frame FYE包含日期,我将其与包含日期日期的其他data.frame进行比较。两者的尺寸相同。然后我定义一个逻辑矩阵A <- matrix(FYE < DATES, nrow = nrow(FYE), ncol = ncol(FYE))。对于A中的每个单元格等于TRUE,我想在FYE中将相应的值添加365天。我尝试了以下方法,但它不起作用:

  A <- matrix(FYE < DATES, nrow = nrow(FYE),
                ncol = ncol(FYE))

  FYE[A == TRUE] <- FYE + 365

错误代码是:

Error in date_next_FYE[A == TRUE] + 365 : 
  non-numeric argument to binary operator

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

创建一些数据

dates <- seq(as.Date("2016-01-01"), as.Date("2017-06-05"), by="day")
set.seed(1234)
FYE <- data.frame(d1=sample(dates, 20), d2=sample(dates, 20), d3=sample(dates, 20))
DATES <- data.frame(d1=sample(dates, 20), d2=sample(dates, 20), d3=sample(dates, 20))

现在,看看子集的作用

str(FYE[FYE < DATES])
chr [1:22] "2016-02-29" "2016-11-27" "2016-01-05" "2016-04-29"

这是一个奇怪的结果。子集FYE[FYE < DATES]似乎返回一个字符串。此提取会删除日期类,因此您必须使用as.Date重新添加它。

所以

FYE[FYE < DATES] <- as.Date(FYE[FYE < DATES]) + 365

将按预期工作。

我们可以检查是否已进行了更改。从上面的原始数据开始,

sum(FYE < DATES)
[1] 22

FYE[FYE < DATES] <- as.Date(FYE[FYE < DATES]) + 365

sum(FYE < DATES)
[1] 4

也许还有一次,好的措施:

FYE[FYE < DATES] <- as.Date(FYE[FYE < DATES]) + 365
sum(FYE < DATES)
[1] 0

答案 1 :(得分:0)

 library(lubridate)

 ymd("2016-07-01") + days(365)