r - 强制相邻事件 data.table 之间的最小间隔
问题描述
我有一个包含参与者评估和日期的数据集。参与者在每次活动结束后的一段时间内都不会被评估,因此我需要忽略在此期间的额外评估。
目前我已经通过一些 hacky 循环实现了这一点,但是有循环和比较,我的实际数据集有数十万行。我想知道是否有人可以想出一个更“纯”的 data.table 解决方案。
library(data.table)
exclusionPeriod = 5
dt = data.table(id = c('a','a','a','a','b','b','b','c','c','c','c'),
start = c(1, 2, 7, 9, 1, 8, 12, 2, 4, 5, 8))
modelOut = data.table(id = c('a','a','b','b','c','c'),
start = c(1, 7, 1, 8, 2, 8))
print(dt)
print(modelOut)
dt[,diff := c(0, diff(start)), by = id]
dt[,csum := cumsum(diff), by = id]
maxIts = 100
its = 0
while (nrow(dt[csum>exclusionPeriod]) & its < maxIts) {
dt[csum>exclusionPeriod, diff := c(0, diff(start)), by = id]
dt[csum>exclusionPeriod, csum := cumsum(diff), by = id]
its = its+1
}
out = dt[csum==0,.(id,start)]
print(out)
print(all.equal(modelOut,out))
解决方案
推荐阅读
- ffmpeg - ffmpeg 处理混合视频期间丢失的数据包
- python - tensorflow.keras 程序每次都返回相同的预测
- ssis - 使用 SSIS 更改窗口注册表值
- typescript - 在 TypeScript gereric 中提前引用未知对象键
- php - 如何通过在codeigniter中使用id数组从数据库中获取数据?
- java - 用于字符串映射的 Json To Dto 类,字符串但允许重复使用相同的键
- html - 响应式图像 - 为什么此场景中的图像没有响应式?
- c# - 我可以在硒中获得元素值吗?
- html - 如何在输入标签之前显示标签
- android - 找不到 com.google.firebase:firebase-crashlytics 颤动