R - 将 n 的样本分成 5 个大小为 x 的组

R - split sample of n into 5 groups of size x

假设我有一个 100 的样本,我想将该样本分成 5 个大小不等的组。但是,我想要每个组的所有可能的大小排列,其中每个组必须由以下样本大小组成 - 5%、10%、20%、50%。因此,例如,一个排列可以是 50%、10%、10%、10%、20%,另一个排列可以是 5%、5%、50%、20%、20%。是否有 r 代码可以帮助我找出所有可能的组大小排列?

data=runif(100)*100
vec= rbind(c(10,10,10,20,50),c(5,5,50,20,20))
datasplit=split(sample(data), rep(1:5, vec[1,]))

我们可以使用 gtools) 中的函数创建 vector ('v1') 的 combinations/permutations 以获得 matrix 输出。然后,删除元素sum不等于100(rowSums(m1)==100)的行。遍历矩阵的行(applyMARGIN = 1)和 split 'data' 的 sample 根据 [= 行中的值分成 5 组=28=]

library(gtools)
#m1 <- combinations(4, 5, v1, repeats.allowed = TRUE)
m1 <- permutations(4, 5, v1, repeats.allowed = TRUE)
m2 <- m1[rowSums(m1)==100,]
r1 <- apply(m2, 1, FUN = function(x) split(sample(data), rep(1:5, x)))

数据

v1 <- c(5, 10, 20, 50)
set.seed(43)
data <- runif(100)*100