假设我有一个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,]))
答案 0 :(得分:1)
我们可以使用combinations/permutations
中的函数创建vector
(' v1')的gtools
来获得matrix
输出。然后,删除元素sum
不等于100(rowSums(m1)==100
)的行。循环遍历矩阵的行(apply
与MARGIN = 1
)和split
sample
的数据'根据' m1'
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