2010-07-09 3 views
7

J'essaie de générer des paires aléatoires à partir de 34 sujets pour une expérience. Les sujets recevront le numéro d'identification 1-34. Pour générer les nombres aléatoires commandés (1-34) je le code suivant:Comment diviser un vecteur en deux colonnes pour créer des paires ordonnées pour l'assignation aléatoire

### 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 

Ce que je voudrais faire est de prendre cet ordre aléatoire de nombres et de diviser tout autre élément du vecteur dans une colonne afin que je reçois les paires ordonnées suivantes:

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

Réflexions ou idées sur la façon de passer du vecteur aux paires ordonnées? Toute aide ou idée serait grandement appréciée.

-Thomas

+0

Vous pouvez obtenir le même effet que 'échantillon (1h34, 34, remplacez = F) 'en utilisant' sample (1:34) '. – mbq

Répondre

12

Cela pourrait être aussi facile que

et chaque ligne vous donne la paire.

Modifier Correct pour matrix()

+0

cela a fonctionné en utilisant 'matrix' au lieu de' as.matrix' pour moi –

+0

Yep même pour moi la matrice a fonctionné aussi bien. Merci Dirk et gd047! – Thomas

0

Divisez votre vecteur dans la matrice et itérer sur des lignes et des colonnes de résultat. La matrice est présentée comme un tableau à deux dimensions. Vous devez donc définir dans cette matrice le premier élément de l'élément ligne à la position impaire dans le vecteur et le deuxième élément à la ligne - position paire dans le vecteur. var vecteur = nouvel octet [34]; // le remplir

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

Le code ci-dessus n'a pas été testé, mais l'algorithme et l'idée sont clairs.

+3

Cette question portait sur R. – Shane

0

alternativement, si vous voulez une trame de données:

df = data.frame(partner1=pairs[1:(length(pairs)/2)], 
       partner2=pairs[((length(pairs)/2)+1):length(pairs)]) 
0

Vous pouvez également condenser le code de Dirk ci-dessus en une ligne

pairs <- matrix(sample(1:34,34,replace=F), ncol=2) 
Questions connexes