这是我的问题。
假设我有一个向量:
vec <- c("a","b","c","d","e","f")
我想在我的向量元素之间随机分配6个值,有时一个元素会得到某些东西(介于1和6之间),有时它什么也得不到,但总和始终必须为6。因此,在一个实例中,例如,这些值将被分配如下:
3,0,1,0,2,0
在另一个位置,可以像这样:
1,0,1,1,2,1
等等其它的。
在R中有没有简单的方法可以做到这一点?
非常感谢您的提前帮助。
Tina。
编辑:
这样做更好,因为它几乎肯定会产生各种分区,其相对频率符合您的期望:
as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0
parts()
函数输出的微调,我们可以得到您要查找的内容。library(partitions)
## Create a function
randPartition <- function(vec) {
pp <- parts(length(vec))
sample(pp[,sample(ncol(pp), 1)])
}
## Try it out a few times
randPartition(vec)
# [1] 1 1 1 1 1 1
randPartition(vec)
# [1] 2 0 0 2 0 2
randPartition(vec)
# [1] 0 0 0 0 0 6
table(factor(sample(vec, 6, replace = TRUE), levels = vec))
。 - Arun