如何在向量的元素中随机分配数字?在R

use*_*441 2 random r vector

这是我的问题.

假设我有一个向量:

vec <- c("a","b","c","d","e","f")
Run Code Online (Sandbox Code Playgroud)

我想在我的向量的元素中随机分配6个值,有时候元素会得到某些东西(1到6之间),有时什么也得不到,但总是值的总和必须总和为6个.所以在例如,一个实例的值将像这样分布:

3,0,1,0,2,0
Run Code Online (Sandbox Code Playgroud)

在另一个像这样:

1,0,1,1,2,1
Run Code Online (Sandbox Code Playgroud)

等等.

在R中有没有简单的方法呢?

非常感谢你提前.

蒂娜.

Jos*_*ien 5

编辑:

这样更好,因为它几乎肯定会产生各种分区,其频率与您期望的相同:

as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0
Run Code Online (Sandbox Code Playgroud)

你在这里的组合对象称为"分区".所述分区包包括用于产生分区的不同口味的一些极好的功能.通过稍微调整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
Run Code Online (Sandbox Code Playgroud)

  • 我也喜欢@ flodel的答案(因为Ricardo的删除答案而迷失了):`table(factor(vec,6,replace = TRUE),levels = vec)) (2认同)