R:可以替代 for 循环吗?

R: Alternative to for-loop possible?

我有一个 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 中找到比 运行 更有效的代码,我已经尝试使用应用函数很长时间了,但似乎找不到合适的代码这样做的可行方法..

最后希望能找到这样的东西:

x = [1,1,..., 2,2,2, ..., 2, 1, 1, 1]

其中 x[1] 是在分析的第一天发生的事件数 (考虑上述示例时的第 13515 天)

谢谢!

如果 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