2013-04-01 72 views
2

这是我的问题。如何在矢量元素中随机分配数字?在R

假设我有一个矢量:

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

您是否在寻找具有替代品的样品? –

回答

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 
+0

谢谢乔希!它工作完美 – user18441

+1

然而,你可能想多想一点,这种方法是否会生成你想要它们的相对频率的各个分区...... –

+2

我也喜欢@ flodel的答案(它随着删除而丢失(因为(样本(vec,6,replace = TRUE),levels = vec))' – Arun