假设我们有两个表格,每个表格都有一个在两个表格之间共同的分组指示器。然后对于DT1中的每一行,我们希望在每个组内从DT2中随机选择2行。
解决这个问题的一种可能的方法是在DT2中随机生成一个整数列,使其与DT1的行相对应,并将两个表格连接起来。但是每个组的行数不同,我们不清楚如何按组长度进行条件处理。
最小工作示例:
如有必要提醒一下,实际应用程序 DT1 中有 4 亿行数据,DT2 中有 1000 万行。
解决这个问题的一种可能的方法是在DT2中随机生成一个整数列,使其与DT1的行相对应,并将两个表格连接起来。但是每个组的行数不同,我们不清楚如何按组长度进行条件处理。
最小工作示例:
DT1 <- data.table(var1=seq(1:20),
group=c(1,1,1,1,1,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4))
DT2 <- data.table(obs=seq(1:13),
group=c(1,1,1,2,2,2,3,3,3,4,4,4,5))
视图:
DT1
var1 group
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 6 2
7: 7 2
8: 8 2
9: 9 2
10: 10 3
11: 11 3
12: 12 3
13: 13 4
14: 14 4
15: 15 4
16: 16 4
17: 17 4
18: 18 4
19: 19 4
20: 20 4
DT2
obs group
1: 1 1
2: 2 1
3: 3 1
4: 4 2
5: 5 2
6: 6 2
7: 7 3
8: 8 3
9: 9 3
10: 10 4
11: 11 4
12: 12 4
13: 13 5
因此,针对DT1中的每一行,我想通过分组将其与DT2中的2行随机配对。预期的结果可能类似于:
DT3
var1 group obs
1: 1 1 1
2: 1 1 3
3: 2 1 2
4: 2 1 3
...
37: 19 4 10
38: 19 4 11
39: 20 4 10
40: 20 4 12
如有必要提醒一下,实际应用程序 DT1 中有 4 亿行数据,DT2 中有 1000 万行。
allow.cartesian
的单行代码非常棒,谢谢! - bpar