Как разделить вектор на два столбца, чтобы создать упорядоченные пары для случайного назначения - PullRequest
7 голосов
/ 09 июля 2010

Я пытаюсь создать случайные пары из 34 предметов для эксперимента.Субъектам будет присвоен ID # 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

Ответы [ 4 ]

13 голосов
/ 09 июля 2010

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

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

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

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

0 голосов
/ 09 июля 2010

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

pairs <- matrix(sample(1:34,34,replace=F), ncol=2)
0 голосов
/ 09 июля 2010

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

df = data.frame(partner1=pairs[1:(length(pairs)/2)],
                partner2=pairs[((length(pairs)/2)+1):length(pairs)])
0 голосов
/ 09 июля 2010

Разделите ваш вектор на матрицу и итерируйте по строкам и столбцам результата.Матрица представлена ​​в виде двухмерного массива.Таким образом, вам нужно установить в этой матрице первый элемент в строке в нечетной позиции в векторе и второй элемент в строке - четной позиции в векторе.вектор var = новый байт [34];// заполним

        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];
            }
        }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...