这个问题是我之前有关递归随机抽样的问题的后续问题。在Efficient recursive random sampling中,该线程中的解决方案仅在组大小相同时或需要每组固定数量的样本时有效。然而,现在假设数据集如下;
ID1 ID2
1 A 1
2 A 6
3 B 1
4 B 2
5 B 3
6 C 4
7 C 5
8 C 6
9 D 6
10 D 7
11 D 8
12 D 9
我们希望对每个ID1随机采样最多n个ID2,并进行递归操作。这里的递归意味着我们从第一个ID1移到最后一个ID1,如果对于一个ID1已经抽取了一个ID2,则不应将其用于后续ID1。 假设n=2,则预期结果如下:
ID1 ID2
1 A 1
2 A 6
4 B 2
5 B 3
6 C 4
7 C 5
11 D 8
12 D 9
- 对于ID1 =“A”,恰好有两个潜在的ID2可供选择,因此都被选中。
- 对于ID1 =“B”,还剩下两个潜在的ID2可供选择,所以都被选中。
- 对于ID1 =“C”,还剩下两个潜在的ID2可供选择,所以都被选中。
- 对于ID =“D”,还剩下三个潜在的ID2可供抽样,因此从中随机选择两个。
除了示例中显示的情况外,还可能发生什么:
- 每个ID1总是有一定数量的可用ID2,但可能所有这些ID2都已经被使用。在这种情况下,应该简单地略过ID1。
- 可能没有任何ID1将具有指定数量的ID2。在这种情况下,应检索最接近指定n的n。
- ID不必是
seq(ID1)
。 - ID2也可以是类似于ID1的字符向量。
示例df;
df <- structure(list(ID1 = c("A", "A", "B", "B", "B", "C", "C", "C",
"D", "D", "D", "D"), ID2 = c(1, 6, 1, 2, 3, 4, 5, 6, 6, 7, 8,
9)), class = "data.frame", row.names = c(NA, -12L))
seq(ID1)
,还是可以只有1, 6
这样的值? - Onyambu