【问题标题】:Count the number of previous occurrences using a time window, not a fixed window size使用时间窗口而不是固定窗口大小计算先前出现的次数
【发布时间】:2015-03-06 06:29:55
【问题描述】:

我有一个如下所示的数据集,最后一列是所需的输出。

   DX_CD  AID      date2  <count.occurences.1000.days>
1  272.4 1649 2007-02-10   0 or N/A
2 V58.67 1649 2007-02-10   0<-  (excluding the same day). OR 1
3 787.91 1649 2010-04-14   0
4 788.63 1649 2011-03-10   1
5 493.90 4193 2007-09-13   0 or N/A  #new AID
6 787.20 6954 2010-02-25   0 or N/A  #new AID
.....

我想通过 AID 计算列 (count.occurences.1000.days) 来计算 X 天内(例如 X=1000)内先前出现的次数。

第一个值为 0 或 N/A,因为在 AID=1649 的记录 #1 之前没有先前的记录。第二个值为 0,因为此事件与记录 #1 发生在同一天。第三个值为 0,因为存在早于 2010-04-14 的记录,但它们超过了 1000 天。第四个值是 1,因为记录 #3 发生在 1000 天内。 AID=4193 和 AID=6954 的逻辑相同

有人可以提供一个想法,最好是矢量化的吗?

【问题讨论】:

  • 我们在新列中计算了之前出现的次数?你能整理一下上面的示例表吗?
  • 这是一个有趣的问题。如果您清理数据并提供一种复制粘贴的方式来创建示例,将会有所帮助。
  • 您可能想在此处调整foverlaps 解决方案stackoverflow.com/revisions/28578977/1
  • 我修改了描述。谢谢。

标签: r window dplyr aggregate


【解决方案1】:

如果我正确理解了这个问题,应该这样做

首先,数据样本

 df <- data.frame(date2=days <- 
                 seq(as.Date("2008-12-30"), as.Date("2015-01-03"), by="days"),
             AID=sample(c(1649, 4193, 6954, 3466), 2196, replace=T), 
             count=(rep.int(1,2196)))

现在我们按从最大到最小的 1000 天分组

df$date.bin <- Hmisc::cut2(df$date2, 
                 cuts=sort(seq(max(df$date2), length=10,by="-1000 days")))

现在我们对分组变量使用 cumsum

res <-df %>% dplyr::arrange(date.bin, AID) %>% group_by(date.bin, AID) %>% 
      mutate(cumsum=cumsum(count))

【讨论】:

  • 随机是什么意思?未分类?
  • 我现在明白你的代码了,有点意思。 2 个事件可以在 30 天内,但分配到不同的日期箱。所以这似乎不是正确的答案。
  • 嗨,我不明白你这次要做什么。请检查 data.table 的重叠连接。换句话说,只有当 a>b & a-b
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多