R:对唯一的 X、Y 对进行采样,无需重复 X 和 Y

  • 本文关键字:采样 唯一 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 对满足 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 是唯一的。任何帮助都将受到欢迎。

如果您首先对原始数据的行进行采样(随机化(,然后仅对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)),]

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

这同样适用于 Y 中的值。

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

最新更新