我很难想出如何在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是唯一的。任何帮助都将受到欢迎。
答案 0 :(得分:3)
如果您首先对原始数据的行进行采样(随机化),那么只对那些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)),]
随机对的数据行进行采样。现在,一旦我们这样做了,它就是一个随机过程,比如4,在第X列中将首先出现,因此将保留在数据中,因为其他4被删除,因为它是X中的重复条目。
这同样适用于Y
。
很明显,在采样和子集之后,您可以自由选择任意3行的剩余数据,即使您总是选择前3行,您仍然会得到一个随机选择,每次你都会有所不同运行它(除非它同时再次采样相同的行)。