J'essaie d'obtenir les meilleures entreprises à partir d'un bloc de données. Voici mon code ci-dessous.
data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)
J'aimerais maintenant obtenir les 50 premières observations de ce vecteur trié.
head
et tail
sont des fonctions vraiment utiles!
head(sort(Forbes2000$profits,decreasing=TRUE), n = 50)
Si vous voulez les 50 premières lignes de data.frame, vous pouvez utiliser la fonction arrange
de plyr
pour trier le data.frame
, puis utiliser head
.
library(plyr)
head(arrange(Forbes2000,desc(profits)), n = 50)
Notez que j’ai enveloppé profits
dans un appel à desc
, ce qui signifie qu’il sera trié par ordre décroissant.
Travailler sans plyr
head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
Utilisez order
pour trier le data.frame
, puis head
pour n’obtenir que les 50 premières lignes.
data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
Vous pouvez utiliser rank
à partir de dplyr
.
library(dplyr)
top_fifty <- Forbes2000 %>%
filter(rank(desc(profits))<=50)
Ceci trie vos données par ordre décroissant et ne conserve que les valeurs dont le rang est inférieur ou égal à 50 (c'est-à-dire les 50 meilleurs).
Dplyr est très utile. Les commandes et la syntaxe de chaînage sont très faciles à comprendre. 10/10 recommanderais.
Mnel a raison de dire qu'en général, vous souhaitez utiliser les fonctions head () et tail () avec une fonction de tri. Je devrais mentionner cependant pour les ensembles de données de taille moyenne, la méthode de Vince fonctionne plus rapidement. Si vous n'avez pas utilisé head () ou tail (), vous pouvez utiliser l'opérateur d'appel de sous-section de base [] ....
library(plyr)
x = arrange(Forbes2000,desc(profits))
x = x[1:50,]
#Or using Order
x = Forbes2000[order(Forbes2000$profits, decreasing= T),]
x = x[1:50,]
Cependant, je recommande vraiment les fonctions head (), tail () ou filter (), car l'opérateur [] habituel suppose que vos données sont structurées dans un tableau ou un format de matrice facile à dessiner. (Il faut espérer que cela répond à la question Teja)
Maintenant, quel emballage vous choisissez est en grande partie subjective. Cependant, en lisant les commentaires des gens, je dirai que le choix d'utiliser les fonctions arrange (), order () de {bases} de plyr avec {utils} head () et tails, ou plyr () dépend largement de la taille de la mémoire et de la taille de la ligne votre jeu de données. Je pourrais expliquer plus en détail comment Plyr et parfois Dplyr ont des problèmes avec de grands ensembles de données complexes, mais je ne veux pas sortir du sujet.
P.S. C’est l’une des premières fois que je réponds, alors vos commentaires sont les bienvenus.