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

时间:2017-03-18 03:58:37

标签: r split permutation percentage

假设我有一个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,]))

1 个答案:

答案 0 :(得分:1)

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

行中的值分为5组
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