Faire un tableau montrant les 10 plus grandes valeurs d'une variable dans R?
Je veux faire un tableau simple qui met en valeur les 10 plus grandes valeurs pour une variable donnée dans mon jeu de données, ainsi que 4 autres variables pour chaque observation, donc, fondamentalement, un petit sous-ensemble de mes données. Il ressemblerait à quelque chose comme ceci:
Score District Age Group Gender
17 B 23 Red 1
12 A 61 Red 0
11.7 A 18 Blue 0
10 B 18 Red 0
.
.
etc.
où les données sont commandés sur le Score de var. Toutes les données sont contenues dans le même dataframe.
Est-il regroupés par Var4? Quel est le résultat attendu
salut @akrun, la sortie attendue est à peu près ce que j'ai écrit dans la boîte, juste avec 10 lignes au lieu de 4. Var1 pourrait être quelque chose comme le résultat d'un test, et var2-var5 serait de données démographiques, par exemple, var2=district, var3=âge, var4=classe, var5=sexe
Il vaut mieux montrer que aussi parce que la description peut être source de confusion. Désolé, je n'ai pas compris ce que tu voulais.
Mise à jour des noms de variables
Voulez-vous les 10 plus grandes lignes en fonction de la
salut @akrun, la sortie attendue est à peu près ce que j'ai écrit dans la boîte, juste avec 10 lignes au lieu de 4. Var1 pourrait être quelque chose comme le résultat d'un test, et var2-var5 serait de données démographiques, par exemple, var2=district, var3=âge, var4=classe, var5=sexe
Il vaut mieux montrer que aussi parce que la description peut être source de confusion. Désolé, je n'ai pas compris ce que tu voulais.
Mise à jour des noms de variables
Voulez-vous les 10 plus grandes lignes en fonction de la
Score
, regroupés par "Groupe"OriginalL'auteur nikUoM | 2015-08-11
Vous devez vous connecter pour publier un commentaire.
Cela devrait le faire...
data <- data[with(data,order(-Score)),]
data <- data[1:10,]
Peut-être que vous pourriez juste l'envelopper dans
head(data[order(-data$Score),], 10)
OriginalL'auteur Gaurav
Vous pouvez faire cela en utilisant
arrange
dedplyr
. Cela devrait aussi fonctionner si il y a le regroupement de variables. Juste ajoutergroup_by
avant laarrange
. On filtre les 10 premières observations à l'aide deslice
.Ou une autre option est
?top_n
(commenté par @docendodiscimus) à partir dedplyr
qui est un wrapper qui utilisefilter
etmin_rank
pour sélectionner le top n (c-10) les inscriptions pour le "Score".Ou nous utilisons
filter
par la création d'une condition logique avecrow_number
qui est équivalent àrank(ties.method='first')
(contribué par @Steven Beaupre)Ou de données.option de la table (par @David Arenburg). Nous convertissons les données.image' à 'des données.table' (
setDT(df1)
),order
(à la baisse) la "Partition" de la variable, et de sélectionner les 10 premières observations..SD
signifieSubset of DataTable
.top_n(df1, 10, Score)
top_n
utilisemin_rank
etrank(ties.method = "min")
. Si vous voulez avoir des résultats avecties.method = "first"
que vous pouvez faire:filter(df1, row_number(desc(Score)) <= 10)
Je me demande si vous pourriez également ajouter
setDT(df1)[order(-Score), .SD[1:10]]
ouhead(setDT(df1)[order(-Score)], 10)
OriginalL'auteur akrun
Vous pouvez obtenir les plus hautes valeurs d'un vecteur à l'aide du code ci-dessous:
Donc, si vous souhaitez utiliser cette méthode comme une trame de données de filtre que vous pouvez faire:
qui donnerait:
OriginalL'auteur Konrad
À l'aide de
sqldf
:De sortie:
OriginalL'auteur mpalanco