【发布时间】:2018-11-06 18:52:05
【问题描述】:
假设我有一个偶数长度的向量,例如:
v <- c(1,1,1,1,2,2,2,3,3,3,4,5,6,7)
它有 14 个元素长。我希望随机抽取 7 对元素而不进行替换,但规则是任何对都不应包含两个相同的项目。
所以下面的结果是可以接受的:
1-2, 1-2, 1-2, 1-3, 3-4, 3-5, 6-7
我不确定如何系统地执行此操作。显然蛮力会起作用,例如
set.seed(1)
v=c(1,1,1,1,2,2,2,3,3,3,4,5,6,7)
length(v)
v1<-sample(v)
pairs <- split(v1, ceiling(seq_along(v1)/2))
sapply(pairs, diff)
1 2 3 4 5 6 7
1 1 2 3 -6 -3 3
这表明没有一对有重复元素,因为差异总是不为 0。在我的情况下,我需要这样做 1000 次,避免重复并不容易。有没有更有效的方法?
【问题讨论】:
-
那只会给我一对。我需要所有 14 个元素来形成 7 对,其中没有一对具有相同的元素两次。
-
unique(v)是否打破了您对频率的假设?也就是说,您是否期望采样返回1是7的四倍? -
@r2evans 是的,返回的对集合需要每个元素的频率与原始向量相同。这就是
replicate(7,sample(unique(v),2))不起作用的原因——因为它是替换抽样。我需要不更换样品。 -
您似乎不想要一个随机样本,而是一个受约束的随机分区
-
你区分 1-2 和 2-1 对吗?您可以将其建模为构造随机图之一,其中顶点为
unique(v),v中每个元素的计数是结果图中这些元素的度数(或有向图,如果顺序很重要)。
标签: r