我有一组 1000 个元素,并且想将 200 个放在子集 1 中,将 300 个放在子集 2 中,将 500 个放在子集 3 中。就分配概率而言,所有元素彼此等价。如何在 R 中做到这一点?我目前的方法是先随机选择 200 个,然后将它们放入子集 1。之后,我会从剩下的 800 个中随机选择 300 个。我认为这并不完全正确。
我认为正确的方法是随机重新排序 1000 个元素序列,然后选择前 200 个,然后是第二个 300,然后是剩下的 500 个。但我不知道如何在 R 中做到这一点。
我有一组 1000 个元素,并且想将 200 个放在子集 1 中,将 300 个放在子集 2 中,将 500 个放在子集 3 中。就分配概率而言,所有元素彼此等价。如何在 R 中做到这一点?我目前的方法是先随机选择 200 个,然后将它们放入子集 1。之后,我会从剩下的 800 个中随机选择 300 个。我认为这并不完全正确。
我认为正确的方法是随机重新排序 1000 个元素序列,然后选择前 200 个,然后是第二个 300,然后是剩下的 500 个。但我不知道如何在 R 中做到这一点。
您可以使用函数sample()
获取原始数据的“随机排列”,然后先选择 200,然后选择 300,依此类推。
#original data
x<-runif(1000)
#random permutation
y<-sample(x)
#data selection
y[1:200]
y[201:500]
y[501:1000]
这是 @Didzis 提出的用于split
返回三个向量列表的稍微不同的版本(或其他内容,如果x
是其他内容):
rep
用于准确获取 200、300 和 500 个元素:
split(sample(x),rep(1:3,times=c(200,300,500)))
使用prob
参数sample
获得 200、300 和 500 个期望的元素:
split(x,sample(1:3,1000,replace=TRUE,prob=c(.2,.3,.5)))
您可能想要其中的第一个。