我有一个data.frame,其中有两列指示某个事件的开始和结束日期,如下所示:
[,1] [,2]
[1,] 14260 14317
[2,] 13515 13694
[3,] 13696 13878
[4,] 13879 14060
[5,] 14061 14243
[6,] 14244 14426
我想获取一个向量,每天包含(在此data.frame中从最小日期到最大日期的时间段内)当天发生的事件数。
我认为for循环是解决此问题的合理方法: 对于某一行中的每两个元素,我将包含当前每日事件数的预定义向量的值增加一个(显然只考虑[,2]和[,1]之间的天数)
但是我想找到一个在R中运行效率更高的代码,我试着在一段时间内使用apply-function,但似乎找不到可行的方法。
最后,我希望找到类似的东西:
x = [1,1,..., 2,2,2, ..., 2, 1, 1, 1]
x [1]是分析的第一天发生的事件数 (考虑上述例子的第13515天)
谢谢!
答案 0 :(得分:0)
如果test
是您的数据框,那么
使用序列创建all_days
向量:
all_days <- seq( from = min(test[[1]]), to = max(test[[2]]))
并计算每个间隔的事件:
events_in_days <-
sapply(all_days, function(x) {
sum( x >= test[[1]] & x <= test[[2]] )
})
您的结果在events_in_days
。
也许你想查看<=
和>=
条件(决定是否包括最后一个或(和)第一天的时间间隔(我包括两者)。
要检查具有不同事件数的天数,请致电table
:
cbind(table(events_in_days))
0 1
1 853
2 58