我很难弄清楚如何在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 对满足 X 和 Y 是唯一条件的对。例如,如果 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 是唯一的。任何帮助都将受到欢迎。
如果您首先对原始数据的行进行采样(随机化(,然后仅对X
或Y
不重复的行进行子集,然后选择第一、最后一或任何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的评论,表示这种方法不会随机选择配对:
它确实随机采样对,因为我做的第一件事(最内在(是
df[sample(nrow(df)),]
随机对数据行进行采样。现在,一旦我们这样做了,这是一个随机过程,比如 X 列中的 4 个将排在第一位,因此将保留在数据中,因为其他 4 个被删除,因为它是 X 中的重复条目。
这同样适用于 Y
中的值。
很明显,在采样和子集化之后,您可以自由选择剩余数据的任何 3 行,即使您总是选择前 3 行,您仍然会得到一个随机选择,每次运行它时都会有所不同(除非它再次巧合地采样相同的行(。