-2
votes

Top 5 des valeurs dans une rangée particulière d'un fichier de données

J'ai un fichier de données avec 165 colonnes où j'ai des valeurs différentes.

Le Dataframe ressemble à ceci: xxx

Je veux trouver les 3 meilleures valeurs pour un rangée particulière. Comment faire ça?


0 commentaires

3 Réponses :


0
votes

Ce n'est probablement pas le plus élégant, mais cela pourrait aider: xxx

à l'aide des données de la réponse ci-dessus: xxx


2 commentaires

Merci pour votre réponse, mais j'ai besoin d'un résultat pour une rangée particulière. comment faire ça?


J'ai un sentiment que vous voulez pour une colonne particulière, mais de toute façon, vous pouvez changer 9 à la deuxième rangée que vous voulez.



2
votes

Voici une option de base r xxx pré>

L'objet de retour est une liste code> avec les 3 numéros supérieurs pour chaque ligne. p>

ou Utilisation de Appliquer CODE> P>

df <- read.table(text = "   skill1   skill2     slkill3       skill4
1     1     0        54             20
2     0     23       9              2
", header = T)


4 commentaires

Appliquer est généralement lent, hors de curiosité Qu'est-ce qu'une alternative à Appliquer , c'est-à-dire que vous pouvez fournir 1 ou 2 pour signifier la ligne ou la colonne?


@Nelsongon " Apply est généralement lent" Je ne suis pas sûr de cela. Lent en comparaison de quoi? Tidyverse Les solutions sont peut-être plus élégantes mais pas nécessairement plus rapides.


Ce n'est pas nécessaire plus lentement, mais il s'agit d'une matrice avant d'appliquer la fonction. Donc, si vous voulez qu'il renvoie le résultat comme dans la structure «entrée», vous devrez ensuite reconvertir le cadre de données et Transpose (qui est une opération très coûteuse)


@Sotos true. Basé sur les données d'échantillons OPS, il peut être logique de fonctionner avec une matrice à partir du démarrage (au lieu d'un data.frame ). Selon ce que OP a l'intention de faire avec la sortie, il n'ya peut-être pas besoin de convertir à un data.frame .



0
votes

avec tendyverse code> vous pouvez faire: xxx pré>

avec Row_Number () code> dans filtre () code> vous Spécifiez le numéro de ligne, puis transformez les données de large en long, arrangez-les selon des valeurs et sélectionnez les trois meilleures valeurs. p>

ou: p>

df %>%
 filter(row_number() == 1) %>%
 gather(var, val) %>%
 mutate(rank = dense_rank(desc(val))) %>%
 filter(rank %in% c(1:3)) %>%
 select(-rank)


0 commentaires