R:采样唯一的X、Y对,无Xs和Ys的重复

R:采样唯一的X、Y对,无Xs和Ys的重复,r,unique,sample,R,Unique,Sample,我很难想出如何在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)将无

我很难想出如何在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)将是有效的解决方案,因为Xs和Ys是唯一的。欢迎提供任何帮助。

如果您先对原始数据行进行采样(随机),然后只对那些未重复的行进行子集,然后选择第一行、最后一行或任何
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行,您仍然会得到一个随机选择,每次运行它时都会有所不同(除非它再次对相同的行进行采样).

也许
i1@akrun这将产生“唯一”值,但它们不是从整个集合中随机选择的。不确定这是否是被问到的问题,但也许这就是为什么你没有把它作为一个答案?就像akrun的答案一样,这将产生“独特”的值,但它们不是从整个集合中随机选择的。我不确定这是否是被问到的问题。@Richo64,我不太同意那种说法。我的回答和akrun的评论之间的一个区别是,我首先对数据行进行采样(即在删除重复项之前)。这使得它成为一个随机选择的配对。它不会创建初始数据中没有的新配对,比如5,10,但我不相信这是要求的。嗨。我一直在尝试你的解决方案,似乎效果很好。至少它为解决我的问题提供了坚实的基础。如果有人想知道该算法的适用性,我需要从不同的行和列中随机选取矩阵中的元素。非常感谢大家。