我有一个数据框(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值会以某种方式被创建。我不知道我的逻辑中是否存在错误,或者我忽略了一些语法问题。
我知道这不是一个解决问题的非常简洁的方法,所以任何其他更简单或更好的逻辑都会受到赞赏。
提前致谢