我有一个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
感谢您的帮助!
答案 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)