Как я разделяю вектор на два столбца для создания упорядоченных пар для случайного присвоения

Я пытаюсь генерировать случайных пар от 34 предметов для эксперимента. Предметами будет присвоенный идентификационный # 1-34. Для генерации случайных заказанных номеров (1-34), я использовал следующий код:

  ### Getting a vector of random ordered numbers 1-34###
  pairs<-sample(1:34,34,replace=F)
  pairs
  [1] 16 22  8 13  4 25 18 12 17  5  6 31 29 27 30 23  2 14  9 24 34 21 11  
    3  1 28 33 20 32 26 19 10 15  7

То, что я хотел бы сделать, должно взять это случайное упорядочивание чисел и разделить любой элемент вектора в столбец так, чтобы я получил следующие упорядоченные пары:

   partner1     partner2
    16           22
     8           13
     .            .
     .            .
    15            7

Мысли или идеи о том, как пойти от вектора до упорядоченных пар? Любая справка или понимание очень ценились бы.

- Thomas

7
задан JD Long 9 July 2010 в 14:04
поделиться

4 ответа

Разделите вектор на матрицу и перебирайте строки и столбцы результата. Матрица представляется как двумерный массив. Поэтому вам нужно установить в этой матрице в первый элемент строки элемент на нечетной позиции в векторе, а во второй элемент строки - четную позицию в векторе. var vector = new byte[34]; //fill it

        var matrix = new byte[2,17]; //the code below will fill this matrix, then you need only to print it
        for (var i=0; i < vector.Length; i++)
        {
            var indexPosition = i + 1;
            if (indexPosition % 2 != 0) //odd number
            {
                matrix[0, i/2] = vector[i];
            }
            else //even number
            {
                matrix[1, i / 2] = vector[i];
            }
        }

Код выше не тестировался, но алгоритм и идея ясны.

0
ответ дан 6 December 2019 в 19:32
поделиться

Это может быть так же просто, как

 newpairs <- matrix(pairs, ncol=2, byrow=TRUE)

и каждая строка дает вам пару.

Редактировать Правильно использовать matrix()

13
ответ дан 6 December 2019 в 19:32
поделиться

поочередно, если вам нужен фрейм данных:

df = data.frame(partner1=pairs[1:(length(pairs)/2)],
                partner2=pairs[((length(pairs)/2)+1):length(pairs)])
0
ответ дан 6 December 2019 в 19:32
поделиться

Вы также можете сжать код Дирка выше в одну строку

pairs <- matrix(sample(1:34,34,replace=F), ncol=2)
0
ответ дан 6 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: