случайное распределение факторных переменных по разным группам с помощью r

У меня есть список из 9 факторных переменных: item <- c("a","b","c","d","e","f","g","h","i"). Я хотел бы случайным образом разделить каждую из 9 факторных переменных на 3 группы. Я пробовал этот сценарий, но это может потребовать много работы:

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

Спасибо за помощь!


person baz    schedule 26.09.2015    source источник


Ответы (1)


Просто выберите элементы и поместите их в 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"
## 
person A5C1D2H2I1M1N2O1R2T1    schedule 26.09.2015
comment
Мне нравится первая матрица (sample (item), ncol = 3), но я не мог получить второй подход. Как бы вы разделили факторные переменные, если их нельзя разделить на равные числа (например, n = 11)? - person baz; 26.09.2015
comment
@baz, обратите внимание, что для второго подхода я усек ваш вектор элемента, удалив 2 значения (n = 7), поэтому я не могу разделить их на равные числа. По этой причине я предложил сохранить его как list вместо прямоугольной структуры данных , если это характерно для ваших реальных данных .... - person A5C1D2H2I1M1N2O1R2T1; 26.09.2015
comment
второй подход стал более ясным после вашего объяснения выше. - person baz; 27.09.2015