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

3

这是我的问题。

假设我有一个向量:

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。


1
你是想要带有替换的样本吗? - Ricardo Saporta
1个回答

7

编辑:

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

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

1
你可能需要再多考虑一下,是否这种方法会按照你想要的相对频率生成各种分区... - Josh O'Brien
2
我也喜欢@flodel的答案(由于Ricardo的删除答案而丢失):table(factor(sample(vec, 6, replace = TRUE), levels = vec)) - Arun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接