R:样本独特的 X,Y 对,没有 X 和 Y 的重复

R: Sample unique X, Y pairs without duplication of Xs and Ys

我很难弄清楚如何在 R 中对此进行编程:给定多个 X 和 Y 对,例如

 X   Y
 9   1
 1   2
12   3
 8   4
 9   4
 4   5
16   6
18   7
 5   8
11   9
 4  10
 6  11
 6  12
14  13
18  13
20  13
13  14
20  15
20  16

我需要随机抽取 n 对满足 Xs 和 Ys 唯一的条件。例如,如果 n=3 并使用上述数据,则以下组合 (9,1) (4,5) (4,10) 或 (1,2) (14,13) (20,13) 将无效因为 X=4 或 Y=13 在每个解决方案中都是重复的。但是,(9,1) (1,2) 和 (8,4) 将是有效的解决方案,因为 X 和 Y 是唯一的。欢迎任何帮助。

如果您首先对原始数据的行进行抽样(随机化),则仅对 XY 重复的那些行进行子集化然后 select 第一个、最后一个或任何 n (=3) 行数(你可以再次使用 sample),我想你应该没问题。

set.seed(1) # for reproducibility
head(subset(df[sample(nrow(df)),], !duplicated(X) & !duplicated(Y)), 3)
#    X Y
#6   4 5
#7  16 6
#10 11 9

回应@Richo64 的评论,说这种方法不会随机 select 对:

确实随机抽样,因为我做的第一件事(最里面)是

df[sample(nrow(df)),]

对数据行随机采样。现在,一旦我们这样做了,它就是一个随机过程,比如 4,在 X 列中将排在第一位,因此将保留在数据中,因为其他 4 被删除,因为它是 X 中的重复条目。

这同样适用于 Y 中的值。

很明显,在采样和子集化之后,您可以自由选择剩余数据的任意 3 行,即使您总是 selected 前 3 行,您仍然会得到一个随机的select每次您 运行 它都会不同的离子(除非它巧合地再次对相同的行进行采样)。