2

这是我的问题。

假设我有一个向量:

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 中有没有简单的方法来做到这一点?

非常感谢你。

蒂娜。

4

1 回答 1

6

编辑:

这更好,因为它几乎肯定会产生具有您期望的相对频率的各种分区:

as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0

您在此处所追求的组合对象称为“分区”partitions包包含许多漂亮的函数,用于生成不同风格的分区。稍微调整一下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
于 2013-04-01T00:18:37.253 回答