【问题标题】:R: Alternative to for-loop possible?R:可以替代 for 循环吗?
【发布时间】:2015-02-15 22:10:09
【问题描述】:

我有一个 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 函数已经有一段时间了,但似乎找不到可行的方法。 .

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

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

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

谢谢!

【问题讨论】:

  • 看看data.table 和函数foverlaps 中的滚动连接。
  • 请参阅相关 QA 的 this answer

标签: r apply


【解决方案1】:

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

也许您想检查 &lt;=&gt;= 条件(以决定是否在间隔中包括最后一天或(和)第一天(我包括两者)。

要查看不同事件数的天数,请致电table

cbind(table(events_in_days))

0    1
1  853
2   58

【讨论】:

  • 好的,非常感谢,这肯定会有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多