Fonction which

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Fonction which

Messagepar Patricia OBEID » 12 Jan 2020, 17:10

Bonjour,
j'ai un dataframe avec des positions (Pos) et des numéros de noyau (NucNb).

> dput(df)
structure(list(Label = c("s13_1_01", "s13_1_02", "s13_1_03",
"s13_1_04", "s13_1_05", "s13_2_01", "s13_2_02", "s13_3_01", "s13_3_02",
"s13_3_03", "s08_1_01", "s08_1_02", "s08_2_01", "s08_2_02", "s08_2_03",
"s08_3_01", "s08_3_02", "s08_3_03", "s08_3_04", "s08_4_01", "s08_4_02",
"s08_4_03", "s08_4_04"), Pos = c("s13", "s13", "s13", "s13",
"s13", "s13", "s13", "s13", "s13", "s13", "s08", "s08", "s08",
"s08", "s08", "s08", "s08", "s08", "s08", "s08", "s08", "s08",
"s08"), NucNb = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 1L,
1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L)), .Names = c("Label",
"Pos", "NucNb"), class = "data.frame", row.names = c(NA, -23L
))

Je voudrais créer un df où j'aurais pour Pos la valeur max de NucNb soit :
Pos NucNbmax
s13 3
s08 4

Je pense qu'il faut utiliser la fonction which mais je ne sais pas comment écrire ce que je souhaite :
extraire la valeur max de nucNb pour chaque Pos.
C'est un problème basique, j'en suis consciente, mais je ne m'en sort pas ...

Un grand merci pour votre aide.
Bonne soirée
Patricia

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Fonction which

Messagepar Logez Maxime » 12 Jan 2020, 19:59

Bonsoir,

tu peux te servir de la fonction aggregate avec FUN = max pour avoir la valeur max ou FUN= which.max si tu veux la position de la valeur max :

Code : Tout sélectionner

aggregate(NucNb ~ Pos, df, max)

Cordialement,
Maxime

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Fonction which

Messagepar Serge Rapenne » 12 Jan 2020, 20:12

Bonjour,

Il y a plein de solutions pour les problèmes de calcul par groupe dans R, les fonctions tapply, by ou aggregate dans les fonctions de base, la fonction group_by du package dplyr.
par ex :

Code : Tout sélectionner

#tapply
with(df,tapply(NucNb,Pos,max))
s08 s13
  4   3

#aggregate
with(df,aggregate(NucNb,list(Pos),max))
  Group.1 x
1     s08 4
2     s13 3

#dplyr et group_by
library(dplyr)
df %>% group_by(Pos) %>% summarise(max=max(NucNb))
# A tibble: 2 x 2
  Pos     max
  <chr> <int>
1 s08       4
2 s13       3


Serge


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité