2015-09-26 49 views
1

我有一個9個因子變量的列表:item <- c("a","b","c","d","e","f","g","h","i")。我想隨機分配9個因子變量中的每一個到3個組。 我想這個劇本,但它可能是大量的工作:隨機分配因子變量到不同的組使用r

gp1 <- sample(item,3,replace=F) 
> gp1 
[1] "b" "h" "g" 

我也嘗試了切換功能,但是這些變量必須是數字:

gp <- cut(item, breaks = 3) 
Error in cut.default(item, breaks = 3) : 'x' must be numeric 

預期的輸出應該是這樣的,但隨機分配到各組:

grp1 grp1 grp3 
d  b  i 
c  e  h 
a  g  f 

謝謝你的幫助!

回答

3

剛剛品嚐的項目,把它放在一個matrix(這也可以轉換爲data.frame,如果你願意的話):

matrix(sample(item), ncol = 3) 
##  [,1] [,2] [,3] 
## [1,] "b" "d" "a" 
## [2,] "f" "i" "e" 
## [3,] "h" "g" "c" 

如果項目不能分割以相等的長度,你可以考慮split,其中拆分變量基於您想要多少組的混洗。

例如:

item <- item[-c(1, 2)] 
split(item, sample(rep(1:3, length.out = length(item)))) 
## $`1` 
## [1] "c" "e" "i" 
## 
## $`2` 
## [1] "f" "g" 
## 
## $`3` 
## [1] "d" "h" 
## 
+0

我喜歡的第一個矩陣(樣品(項目)的NcoI = 3),卻未能真正得到了第二種方法。如果不能將它們分成相同的數字(例如n = 11),那麼如何分解因子變量? – baz

+0

@baz,請注意,對於第二種方法,我通過刪除2個值(n = 7)來截斷「項目」向量,因此我無法將它們拆分爲相同的數字。因此,我建議把它保留爲一個'list'而不是一個矩形數據結構*,如果這是你實際數據的一個特徵* ...... – A5C1D2H2I1M1N2O1R2T1

+0

第二種方法現在在你上面的解釋後更清楚了。 – baz