r - 计算R中最近x天内ID的出现

标签 r dplyr data.table

这是我关于stackoverflow的第一篇文章,所以如果我的文章不够详细,请原谅我。
我有一个包含两列(日期和组ID)的数据表。在当前日期,我想计算最近x天内发生的组出现次数。在下面的示例中,我们可以说过去30天。

date = c("2014-04-01", "2014-04-12", "2014-04-07", "2014-05-03", "2014-04-14", "2014-05-04", "2014-03-31", "2014-04-18", "2014-04-23", "2014-04-01")
group = c("G","G","F","G","E","E","H","H","H","A")
dt = data.table(cbind(group,date))

   group       date
1:     G 2014-04-01
2:     G 2014-04-12
3:     F 2014-04-07
4:     G 2014-05-03
5:     E 2014-04-14              
6:     E 2014-05-04
7:     H 2014-03-31
8:     H 2014-04-18
9:     H 2014-04-23
10:    A 2014-04-01
因此,我想要的新列将如下所示:
   group       date   count
1:     G 2014-04-01       0
2:     G 2014-04-12       1
3:     F 2014-04-07       0
4:     G 2014-05-03       1 (not including first G since it is outside 30 days)      
5:     E 2014-04-14       0       
6:     E 2014-05-04       1
7:     H 2014-03-31       0
8:     H 2014-04-18       1
9:     H 2014-04-23       2
10:    A 2014-04-01       0 
我能够使用dplyr对当前日期的组出现次数进行非窗口计数,但是我正在努力寻找一种进行30天计数的方法。对于非窗口计数,我执行了以下操作:
dt = data.table(dt %>%
 group_by(group) %>%
 mutate(count = row_number() - 1))

    group       date count
 1:     G 2014-04-01     0
 2:     G 2014-04-12     1
 3:     F 2014-04-07     0
 4:     G 2014-05-03     2
 5:     E 2014-04-14     0
 6:     E 2014-05-04     1
 7:     H 2014-03-31     0
 8:     H 2014-04-18     1
 9:     H 2014-04-23     2
10:     A 2014-04-01     0
这是数据集的一个小样本,整个数据集包含几百万行,因此我需要高效的东西。任何提示或建议,将不胜感激。先感谢您!

最佳答案

data.table选项

dt[, date := as.Date(date)][, count := cumsum(date <= first(date) + 30) - 1, group]
> dt
    group       date count
 1:     G 2014-04-01     0
 2:     G 2014-04-12     1
 3:     F 2014-04-07     0
 4:     G 2014-05-03     1
 5:     E 2014-04-14     0
 6:     E 2014-05-04     1
 7:     H 2014-03-31     0
 8:     H 2014-04-18     1
 9:     H 2014-04-23     2
10:     A 2014-04-01     0

遵循类似想法的dplyr选项
dt %>%
  mutate(date = as.Date(date)) %>%
  group_by(group) %>%
  mutate(count = cumsum(date <= first(date) + 30) - 1) %>%
  ungroup()

关于r - 计算R中最近x天内ID的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66573334/

相关文章:

r - 在 R 中绘制子集 os 子集

r - margins 包返回错误 eval 中的错误(model[ ["call"]][ ["data"]], env) : object '.' not found

R 使用 beside=TRUE 参数时出错

使用 dplyr 计算多列的行中位数

R的data.table找不到函数 "."

r - 将wrld3d映射添加到R Leaflet软件包

用 map 替换 for 循环?

r - 加入 data.table 时值发生变化

r - 使用data.table按组抽样而不重复

r - 如何查找ANY列是否具有我要查找的特定值?