r - 动态子集数据表

标签 r data.table

我有一个关于动态子集数据表的问题。我知道 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] 

但不幸的是这不起作用。

任何有用的评论都将受到赞赏!谢谢!

最佳答案

您必须意识到,随着唯一日期/ID 数量的增加,组合会呈爆炸式增长。即使对于 date=1:10 和 id=1:10,答案也是 4050 行(需要 0.7 秒),而对于 date=1:50 和 id=1:50,答案已经是 3001250 行(需要 6.2 秒)。话虽如此,这应该按预期工作:

setkey(dt, date, id)
ans <- dt[!J(1), {d.tmp = date-1; id.tmp = id; dt[CJ(1:d.tmp, 
        setdiff(id, id.tmp))]}, by=list(date, id)]
setnames(ans, make.unique(names(ans)))
setkey(ans, date, id, date.1)

    date id date.1 id.1 var
 1:    2  1      1    2   2
 2:    2  1      1    3   3
 3:    2  1      1    4   4
 4:    2  1      1    5   5
 5:    2  2      1    1   1
 6:    2  2      1    3   3
 7:    2  2      1    4   4
 8:    2  2      1    5   5
 9:    2  3      1    1   1
10:    2  3      1    2   2
11:    2  3      1    4   4
12:    2  3      1    5   5
13:    2  4      1    1   1
14:    2  4      1    2   2
15:    2  4      1    3   3
16:    2  4      1    5   5
17:    2  5      1    1   1
18:    2  5      1    2   2
19:    2  5      1    3   3
20:    2  5      1    4   4

关于r - 动态子集数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608501/

相关文章:

r - 了解 hist() 和 R 中的中断间隔

r - 通过函数对 data.table 进行绝对降序排序?

R data.table : Merge conditional summary of a data. table 在一条语句中返回到原始data.table

R - 使用 data.table 连接超过 2^31 行

r - 右转

r - 所有预定义元素集发生后分割向量

基于整数列的R : data.表子设置

R 数据表中的 PosixCT 变量

r - 在R ggplot中绘制数据点中两点之间的线

R:如何在表达式中获取和设置命名参数