2013-04-01 103 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