gpt4 book ai didi

r - 动态子集数据表

转载 作者:行者123 更新时间:2023-12-02 21:45:27 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com