6
votes

En utilisant R, attribuant au hasard les étudiants en groupes de 4

J'apprends toujours R et j'ai reçu la tâche de regrouper une longue liste d'étudiants en groupes de quatre basées sur une autre variable. J'ai chargé les données dans R comme cadre de données. Comment puis-je réaménager des lignes entières sans remplacement, une de chacun des 4 niveaux d'une variable et avoir une sortie R sur les données dans une feuille de calcul?

Jusqu'à présent, j'ai bricé avec A pour la boucle et la fonction d'échantillon, mais je suis rapidement se surmonter la tête. Aucune suggestion? Voici un échantillon de ce que je tente de faire. Donné: xxx

Je veux sélectionner au hasard un personnage Star Trek à partir de chaque section et finir avec 2 groupes de 4. Je voudrais la valeur de la ligne entière d'informations pour le faire sur une nouvelle trame de données contenant tous les groupes avec leur numéro de groupe correspondant.


6 commentaires

Une recherche rapide Google de échantillon R renvoie ceci: stat.thz.ch/r-manual/r-devel/library/base/html/sample.html


@ tcash21 - ce n'est pas très utile. OP mentionne déjà la fonction exemple . Jeremy - Pouvez-vous fournir un exemple simplifié de vos données et de vos résultats attendus pour améliorer cette question?


Oups n'a pas vu qu'il a mentionné la fonction d'échantillonnage. Oui un exemple reproductible est requis cependant.


J'ai fait une édition montrant un exemple simplifié de ma tâche. Merci beaucoup pour la réponse rapide et l'aide jusqu'à présent.


Vous êtes manquant Nimoy


Bonnes données de données OL '. xkcd.com/1429


5 Réponses :


2
votes

Je suppose que vous avez 8 étudiants: first.name .

Si vous souhaitez attribuer un numéro de section au hasard aux 8 étudiants, et que vous souhaitez que chaque section ait 2 élèves, vous pouvez soit permerger section ou permuter la liste des étudiants. P>

première approche, permuter les sections: p>

assigned_students <- data.frame(assigned_students, Section)


0 commentaires

5
votes

J'utiliserais le merveilleux package 'dplyr' xxx

%>% signifie "puis"

Le code est lu comme: < p> Prenez DF, puis pour toutes les "section", sélectionnez par position (tranche) 1 ou 2. Voila.


1 commentaires

Wow. C'est vraiment génial. Je télécharge ce paquet en ce moment. Donne beaucoup plus jolie d'un résultat que ce que je faisais. Merci!



1
votes

Alex, merci. Votre réponse n'était pas exactement ce que je cherchais, mais cela a inspiré le bon pour moi. Je pensais au processus d'un point de vue beaucoup trop compliqué. Au lieu d'avoir R Sélectionner des lignes et de les mettre dans une nouvelle image de données, j'ai décidé d'affecter un numéro aléatoire à chacun des élèves, puis de trier la trame de données par le numéro suivant:

Premièrement, j'ai rompu le cadre de données en sections: p> xxx pré>

puis j'ai généré au hasard un numéro de groupe 1 à 4. p> xxx pré>

suivant, j'ai dit à r Liez les colonnes: p> xxx pré>

* a exécuté le générateur de numéro de groupe et cbind dans l'ordre alternatif jusqu'à ce que je sois à travers l'ensemble de l'ensemble. (Je voulais s'assurer que l'ordre des chiffres était unique pour chaque section). P>

Enfin, la liaison de la ligne de la ligne Retour ensemble: P>

Final_List<-rbind(Assigned1,Assigned2,Assigned3,Assigned4)


0 commentaires

0
votes

Si vous souhaitez rouler votre propre:

set <-  tapply(1:nrow(df), df$Section, FUN = sample, size = 1)
df[set,]    # show the sampled set
df[-set,]   # show the complimentary set


0 commentaires

1
votes

Je suggérerais le package rightizr code> sur "Bloquer Attribuer" conformément à la section. La fonction block_ra code> vous permet de le faire dans une doublure facile à lire.

df[df$group == "group_1",]

  Last.Name First.Name   Email Section   group
2      Troi     Deanna b@b.com       1 group_1
3     Riker    William c@c.com       2 group_1
6   Crusher    Beverly f@f.com       3 group_1
7   Crusher     Wesley g@g.com       4 group_1

df[df$group == "group_2",]

  Last.Name First.Name   Email Section   group
1    Picard   Jean-Luc a@a.com       1 group_2
4  La Forge     Geordi d@d.com       2 group_2
5       Yar      Tasha e@e.com       3 group_2
8      Data       Data h@h.com       4 group_2


0 commentaires