2010-07-09 8 views
7

Estoy tratando de generar pares aleatorios de 34 sujetos para un experimento. A los sujetos se les asignarán los números de identificación 1-34. Para generar los números aleatorios ordenados (1-34) He utilizado el siguiente código:Cómo divido un vector en dos columnas para crear pares ordenados para la asignación aleatoria

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

Lo que me gustaría hacer es tomar esta ordenación aleatoria de números y dividir cualquier otro elemento del vector en una columna de forma que obtener los siguientes pares ordenados:

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

pensamientos o ideas sobre cómo ir a partir del vector de los pares ordenados? Cualquier ayuda o idea sería muy apreciada.

-Thomas

+0

Usted puede obtener el mismo efecto que 'muestra (1:34, 34, reemplazar = F) 'usando' muestra (1:34) '. – mbq

Respuesta

12

que podría ser tan fácil como

y cada fila luego le da el par.

Edición correcta de usar matrix()

+0

funcionó usando 'matrix' en lugar de' as.matrix' para mí –

+0

Sí, la matriz para mí también funcionó. ¡Gracias Dirk y gd047! – Thomas

0

dividir el vector en la matriz y iterar sobre las filas y columnas de resultado. Matrix se presenta como una matriz bidimensional. Por lo tanto, debe establecer en esta matriz el primer elemento en el elemento de fila en la posición impar en vector y en el segundo elemento en fila, incluso posición en vector. var vector = new byte [34]; // llenan

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

Código anterior no probado, pero algoritmo y la idea es clara.

+3

Esta pregunta fue sobre R. – Shane

0

alternativamente, si quieres una trama de datos:

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

También puede condensarse código de Dirk arriba en una línea

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