J'ai un fichier de données avec 165 colonnes où j'ai des valeurs différentes.
Le Dataframe ressemble à ceci: p> Je veux trouver les 3 meilleures valeurs pour un rangée particulière. Comment faire ça? P> p>
3 Réponses :
Ce n'est probablement pas le plus élégant, mais cela pourrait aider: à l'aide des données de la réponse ci-dessus: p>
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.
Voici une option de base r L'objet de retour est une liste ou Utilisation de code> avec les 3 numéros supérieurs pour chaque ligne. p>
Appliquer CODE> P>
df <- read.table(text = " skill1 skill2 slkill3 skill4
1 1 0 54 20
2 0 23 9 2
", header = T)
Appliquer CODE> est généralement lent, hors de curiosité Qu'est-ce qu'une alternative à
Appliquer code>, c'est-à-dire que vous pouvez fournir 1 ou 2 pour signifier la ligne ou la colonne?
@Nelsongon " Apply code> est généralement lent" i> Je ne suis pas sûr de cela. Lent en comparaison de quoi?
Tidyverse code> 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 B> 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 code> code> à partir du démarrage (au lieu d'un data.frame code>). Selon ce que OP a l'intention de faire avec la sortie, il n'ya peut-être pas besoin de convertir à un
data.frame code>.
avec avec ou: p> tendyverse code> vous pouvez faire:
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>
df %>%
filter(row_number() == 1) %>%
gather(var, val) %>%
mutate(rank = dense_rank(desc(val))) %>%
filter(rank %in% c(1:3)) %>%
select(-rank)