R:样本唯一的X,Y对,没有X和Y的重复

时间:2016-02-02 11:40:58

标签: 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)将无效因为X = 4或Y = 13在每个解决方案中都是重复的。但是,(9,1)(1,2)和(8,4)将是有效的解决方案,因为X和Y是唯一的。任何帮助都将受到欢迎。

1 个答案:

答案 0 :(得分:3)

如果您首先对原始数据的行进行采样(随机化),那么只对那些XY 重复的行进行分组,然后选择第一行,最后或任何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)),]

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

这同样适用于Y

中的值

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