2017-05-12 6 views
0

私はdate.frame FYEと日付を含む他のdata.frameと比較します。日付はDATESです。両方の寸法は同じです。次に、論理行列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 

ありがとう!

答えて

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 
+0

だから、クラスが削除されますか? – Sotos

+0

これは私にとっては驚きでしたが、 'FYE [FYE lmo

+1

それは理にかなっています。行列は私が思うような日付を保持することができないので、論理行列は本当にクラスを破壊するものです(おそらく) – Sotos

0
library(lubridate) 

ymd("2016-07-01") + days(365) 
関連する問題