Случайно переупорядочить (перемешать) строки матрицы? - PullRequest
5 голосов
/ 31 января 2012

Я хотел бы случайным образом переупорядочить строки матрицы A, чтобы сгенерировать другую новую матрицу. Как это сделать в R?

1 Ответ

13 голосов
/ 31 января 2012

Используйте sample() для генерации индексов строк в (псевдо) случайном порядке и переупорядочьте матрицу, используя [.

## create a matrix A for illustration
A <- matrix(1:25, ncol = 5)

Giving

> A
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25

Далее,создать случайный порядок для строк

## generate a random ordering
set.seed(1) ## make reproducible here, but not if generating many random samples
rand <- sample(nrow(A))
rand

Это дает дает

> rand
[1] 2 5 4 3 1

Теперь используйте это, чтобы изменить порядок A

> A
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25
> A[rand, ]
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    7   12   17   22
[2,]    5   10   15   20   25
[3,]    4    9   14   19   24
[4,]    3    8   13   18   23
[5,]    1    6   11   16   21
...