日付を含むdata.frame FYEがあり、日付を含む他のdata.frameと比較していますDATES。両方の寸法は同じです。それから論理行列を定義します A <- matrix(FYE < DATES, nrow = nrow(FYE), ncol = ncol(FYE))
。等しいTRUEのAの各セルに対して、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
ご協力いただきありがとうございます!
回答:
回答№1は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
もう1度、いい方法では:
FYE[FYE < DATES] <- as.Date(FYE[FYE < DATES]) + 365
sum(FYE < DATES)
[1] 0
回答№2の場合は0
library(lubridate)
ymd("2016-07-01") + days(365)