0

インシデントの到着日とクローズ日を含むデータ フレーム (df) があります。形式は次のとおりです。

ID       ArrivalDate    ClosedDate       

1          2015-12-01     2015-12-08
2          2015-12-01     2015-12-18
3          2015-12-02     2015-12-11 
4          2015-12-02     2015-12-03 
.             .              .           
.             .              .           
300        2016-05-03      2016-05-13  

2015 年 12 月 1 日から 2016 年 5 月 31 日までの 1 週間あたりのアクティブな (到着したがクローズされていない) 数を調べたいと考えています。すなわち。出力は次のようになります (これは正しい出力値ではなく、本来あるべき姿です)。

週番号 StartDate EndDate Active

1          2015-12-01   2015-12-08      4
2          2015-12-08   2015-12-15      15
3          2015-12-15   2015-12-22      20
.             .              .           .
.             .              .           .
26         2016-05-24  2016-05-31        3

2 つの for ループを使用して、df の各要素を各週の開始日と終了日と比較しました。また、すでに週番号、各週の開始日と終了日、およびアクティブな番号(最初はすべてゼロ)を持つデータフレーム(週)を使用しました

これは私が使用したコードです:

for(i in 1:nrow(df)){
    for(j in 1:nrow(Week)){
        if(df$ArrivalDate[i]>=Week$StartDate[j]&df$ArrivalDate[i]<Week$EndDate[j])                 
            Week$Active[j]<-Week$Active[j]+1

        if(df$ClosedDate[i]>=Week$EndDate[j]){
            k<-j+1    
                repeat{      
                Week$Active[k]<-Week$Active[k]+1
                if(df$ClosedDate[i]>=Week$EndDate[k])break
                k<-k+1
                }
        }     

        if(df$ClosedDate[i]<Week$EndDate[j])break            
    }
 } 

「引数の長さがゼロです」や「TRUE / FALSEが必要な場所に値がありません」などのifステートメントでエラーが発生し続け、NA値が何らかの形で作成されていると信じています。それが私のロジックの間違いなのか、見落としている構文の問題なのかはわかりません。

これは問題を解決するための非常にきちんとした方法ではないことを私は知っているので、他のより単純な、またはより良いロジックがあれば幸いです。

前もって感謝します


4

0 に答える 0