我有一个数据框(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-01到2016-05-31,每周有多少人活跃(已经到达但未关闭) . 即 . 输出应该看起来像这样(这不是正确的输出值,它应该是什么样子) .

Weeknumber 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

我使用了两个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”,我会不断收到错误,这让我相信NA值会以某种方式被创建 . 我不知道我的逻辑中是否存在错误,或者我忽略了一些语法问题 .

我知道这不是解决问题的非常简洁的方法,所以任何其他更简单或更好的逻辑都会受到赞赏 .

提前致谢