如何对 R 中配对的项目进行采样()而不丢失对

How to take sample() of items that are paired in R and not lose pairs

我有一个 x 和 y 地理坐标(30,000 多个坐标)的数据框,看起来像下面的示例矩阵 points。我想随机抽取这些样本,但这样我就不会丢失 x 和 y 坐标对。

例如,我知道我可以获得 xy 中的 2 个项目的随机样本,但我如何获得随机样本以便将项目放在一起保存了吗?换句话说,在我的 points 矩阵中,一个实际点是与 y 列表中的第一项对应的一对 x 坐标(例如,第一项:-12.89): 18.275.

有没有一种方法可以将 xy 中的项目放在一起,以便将顺序保存在类似元组的对象中(我更像是 python 用户)然后使用 sample() 随机抽样?谢谢。

# Make some pretend data
x<-c(-12.89,-15.35,-15.46,-41.17,45.32)
y<-c(18.275,11.370,18.342,18.305,18.301)
points<-cbind(x,y)
points

# Get a random sample:
# This is wrong because the x and y need to be considered together
c(sample(x, 2),
  sample(y, 2))

# This is also wrong because it treats each item in `points` separately
sample(points, size=2, replace=FALSE)

最终,在这个例子中,我希望得到两个随机配对在一起的结果。 例如:(-15.35,11.370) 和 (45.32,18.301)

您可以从行索引中取一个sample

set.seed(42)
points[sample(seq_len(nrow(points)), 2), ]

给予

#          x      y
#[1,] -12.89 18.275
#[2,]  45.32 18.301

另一个选项可以是:

set.seed(123)
do.call(`rbind`, sample(asplit(points, 1), 2))

          x      y
[1,] -15.35 11.370
[2,] -41.17 18.305