我有一个关于动态子集数据表的问题。我知道在stackoverflow上有许多线程的名称相似,但是不幸的是,它们并没有引导我找到所需的解决方案。
示例数据集:
require(data.table)
dt <- data.table(date=c(rep(1,5),rep(2,5)),id=rep(1:5,2),var=c(1:10))
对于每个ID,我想找到之前所有时段的所有其他ID的子集。在示例数据集中,有5个ID和两个句点。如果在时段2中查看ID = 5,则对应的子集将是ID = {1,2,3,4)和date = 1的子集。在这个简单的数据集中,我当然可以手动编写代码:
dt[,dt[-.I][date<2],by=id]
但是,我想自动执行此操作。我尝试了类似的东西
dt[,dt[-.I][date < unique(dt$date[.I])],by=id]
不幸的是,这行不通。
任何有用的评论表示赞赏!谢谢!
我认为这是更快的解决方案:
dta <- data.table(date=c(rep(1,5),rep(2,5)),id=rep(1:5,2),var=c(1:10))
dta[,dta[dta[.I]$id!=dta$id & dta[.I]$date>dta$date],by=list(id,date)]
非常感谢您对如何使此代码更快的任何评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句