/ /日付を含むデータフレームの特定の値にのみ一定の日数を追加する - r、date、dataframe

日付を含むデータフレームの特定の値に一定の日数を追加する - r、date、dataframe

日付を含む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)