这是我的问题。
假设我有一个向量:
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中有没有简单的方法呢?
非常感谢你。
蒂娜。
答案 0 :(得分:5)
修改强>
这样更好,因为它几乎肯定会产生各种分区,其频率与您期望的相同:
as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0
您在此后的组合对象称为"partition"。 分区包中包含许多用于生成不同风格分区的漂亮函数。通过稍微调整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