2010-07-09 5 views
7

Sto provando a generare coppie casuali da 34 soggetti per un esperimento. Ai soggetti verrà assegnato il numero ID 1-34. Per generare i numeri casuali ordinate (1-34) ho usato il seguente codice:Come dividere un vettore in due colonne per creare coppie ordinate per l'assegnazione casuale

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

Quello che vorrei fare è quello di prendere questo ordinamento casuale di numeri e dividere ogni altro elemento del vettore in una colonna in modo che ottengo le seguenti coppie ordinate:

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

Pensieri o idee su come passare dal vettore alle coppie ordinate? Qualsiasi aiuto o intuizione sarebbe molto apprezzato.

-Thomas

+0

È possibile ottenere lo stesso effetto di 'campione (1:34, 34, replace = F) 'usando' sample (1:34) '. – mbq

risposta

12

Questo potrebbe essere facile come

e ogni riga poi ti dà la coppia.

Modifica corretta da usare matrix()

+0

ha funzionato usando 'matrix' invece di' as.matrix' per me –

+0

Sì, anche per me la matrice ha funzionato bene. Grazie Dirk e gd047! – Thomas

0

dividere il vettore in matrice e iterare righe e colonne di risultato. La matrice viene presentata come una matrice bidimensionale. Quindi è necessario impostare in questa matrice il primo elemento dell'elemento riga nella posizione dispari nel vettore e il secondo elemento nella riga, anche la posizione nel vettore. 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]; 
      } 
     } 

Codice sopra non testato, ma l'algoritmo e l'idea sono chiari.

+3

Questa domanda riguardava R. – Shane

0

alternativamente, se si vuole un frame di dati:

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

È inoltre possibile condensare il codice di Dirk sopra in una riga

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