Я пытаюсь генерировать случайных пар от 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
Разделите вектор на матрицу и перебирайте строки и столбцы результата. Матрица представляется как двумерный массив. Поэтому вам нужно установить в этой матрице в первый элемент строки элемент на нечетной позиции в векторе, а во второй элемент строки - четную позицию в векторе. 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];
}
}
Код выше не тестировался, но алгоритм и идея ясны.
Это может быть так же просто, как
newpairs <- matrix(pairs, ncol=2, byrow=TRUE)
и каждая строка дает вам пару.
Редактировать Правильно использовать matrix()
поочередно, если вам нужен фрейм данных:
df = data.frame(partner1=pairs[1:(length(pairs)/2)],
partner2=pairs[((length(pairs)/2)+1):length(pairs)])
Вы также можете сжать код Дирка выше в одну строку
pairs <- matrix(sample(1:34,34,replace=F), ncol=2)