R:可能替代for循环吗?

时间:2015-02-15 10:48:38

标签: r apply

我有一个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天)

谢谢!

1 个答案:

答案 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