7 votes

Comment diviser un vecteur en deux colonnes pour créer des paires ordonnées en vue d'une affectation aléatoire ?

J'essaie de générer des paires aléatoires à partir de 34 sujets pour une expérience. Les sujets se verront attribuer des numéros d'identification de 1 à 34. Pour générer les nombres aléatoires ordonnés (1-34), j'ai utilisé le code suivant :

  ### 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, c'est prendre cet ordre aléatoire de nombres et diviser tous les autres éléments du vecteur en une colonne de manière à obtenir les paires ordonnées suivantes :

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

Des idées sur la façon de passer du vecteur aux paires ordonnées ? Toute aide ou tout commentaire serait très apprécié.

-Thomas

15voto

Dirk Eddelbuettel Points 134700

Cela peut être aussi simple que

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

et chaque ligne vous donne ensuite la paire.

Editar Correct à utiliser matrix()

0voto

Eugene Cheverda Points 4565

Divisez votre vecteur en matrice et itérez sur les lignes et les colonnes du résultat. La matrice est présentée comme un tableau à 2 dimensions. Vous devez donc définir dans cette matrice le premier élément de la ligne à la position impaire dans le vecteur et le deuxième élément de la ligne à la position paire dans le vecteur. var vector = new byte[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.

0voto

chrisamiller Points 1236

Alternativement, si vous voulez un cadre de données :

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

0voto

patrick95350 Points 86

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X