R - Создание случайной комбинации для элементов двух векторов - PullRequest
0 голосов
/ 21 января 2019
a <- rnorm(10)

b <- sample(a,18,replace = T)

Для каждого элемента a я хочу случайным образом присвоить значение из вектора b. Так что у меня будет комбинация для всех элементов вектора «а». Это будет что-то вроде:

combinations <- data.table(first=a ,second=sample(b,length(a)))

То, что я на самом деле хочу, немного отличается от data.table combinations. Я хочу получить набор комбинаций, в которых ни одна из строк не имеет повторяющихся значений.

Редактировать: комбинации $ first [i] и комбинации $ second [i] могут быть равны в приведенном выше коде. То, что я хочу, это сделать невозможным иметь случай, когда комбинации $ first [i] и комбинации $ second [i] равны.

Примечание: я сделаю это для большого вектора, поэтому он должен быть быстрым.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете произвести выборку по группам следующим образом

library(data.table)
set.seed(0L)
a <- LETTERS[1L:10L]
output <- data.table(first=a)[, .(second=sample(setdiff(a, first), .N)), by=.(first)]

Если необходим случайный порядок строк, вы можете запустить output[sample(.N)].

Выход:

    first second
 1:     A      J
 2:     B      D
 3:     C      E
 4:     D      G
 5:     E      J
 6:     F      B
 7:     G      J
 8:     H      J
 9:     I      F
10:     J      F
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...