2 votes

Tri des données dans R

J'ai un ensemble de données que je dois trier par participant (RECORDING_SESSION_LABEL) et par numéro de procès. Cependant, lorsque je trie les données à l'aide de R, aucune des fonctions de tri que j'ai essayées ne place les variables dans l'ordre numérique correct que je souhaite. La variable participant est correcte mais la variable numéro d'essai est dans le mauvais ordre pour ce dont j'ai besoin.

en utilisant : fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(trial_number)),]

L'ID du participant est le suivant :

118 118 118 118 etc. 211 211 211 etc. 306 306 306 etc.(ce qui est bien)

Le numéro de l'essai est le suivant :

1 1 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 2 2 20 20 .... (ce qui n'est pas ce que je veux - il semble que le tri soit lexical plutôt que numérique)

Ce que je voudrais, c'est que le numéro d'essai soit ordonné comme ceci dans chaque numéro de participant :

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 ....

J'ai vérifié que ces variables ne sont pas des facteurs et qu'elles sont numériques. J'ai également essayé sans le paramètre 'as.numeric', mais sans succès. En cherchant un peu, j'ai vu des suggestions selon lesquelles sort() et mixedsort() pourrait faire l'affaire à la place de "order", mais les deux donnent lieu à des erreurs. Je m'arrache lentement les cheveux sur ce qui devrait être une chose simple. Quelqu'un peut-il m'éclairer sur la façon de procéder pour obtenir ce dont j'ai besoin ?

2voto

Shea Parkes Points 144

Même si vous prétendez qu'il ne s'agit pas d'un facteur, il se comporte exactement comme s'il s'agissait d'un facteur. Tester si quelque chose est un facteur peut être délicat car un facteur est juste un vecteur entier avec un attribut de niveau et une étiquette de classe. S'il s'agit d'un facteur, votre code doit contenir un appel à as.character() imbriqué dans le as.numeric() :

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(as.character(trial_number))),]

Pour être vraiment sûr qu'il s'agit d'un facteur, je recommande l'outil str() fonction : str(trial_number)

0voto

MikeZ Points 345

Je pense qu'il peut être intéressant pour vous de concevoir votre propre fonction dans ce cas. Ce ne serait pas trop En fait, on peut concevoir un algorithme de tri à bulles en y apportant quelques modifications. Ces modifications pourraient transformer chaque nombre en une chaîne de caractères, et commencer par trier ceux qui ont un nombre différent de chiffres dans différents bacs (ce qui est facile à faire en trouvant quels nombres, qui sont maintenant des chaînes de caractères, ont le plus grand nombre d'indices). Ensuite, de la même manière, les nombres dans ces bacs pourraient être triés en convertissant le chiffre le moins significatif en un type numérique et en vérifiant lesquels sont les plus grands/petits. Si cela vous intéresse, je pourrais créer un code pour cela, mais il semble que les deux personnes au-dessus de moi m'aient devancé avec certaines des fonctions intégrées. Je n'ai jamais utilisé ces fonctions, donc je ne suis pas sûr qu'elles fonctionnent comme vous le souhaitez, mais il ne sert à rien de réinventer la roue.

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