Extraire la valeur maximale dans chaque groupe dans un dataframe

J’ai un bloc de données avec une variable de regroupement (“Gene”) et une variable de valeur (“Value”):

Gene Value A 12 A 10 B 3 B 5 B 6 C 1 D 3 D 4 

Pour chaque niveau de ma variable de regroupement, je souhaite extraire la valeur maximale. Le résultat doit donc être un bloc de données avec une ligne par niveau de la variable de regroupement:

 Gene Value A 12 B 6 C 1 D 4 

L’ aggregate pourrait-il faire l’affaire?

Il y a beaucoup de possibilités pour faire cela dans R. En voici quelques unes:

 df <- read.table(header = TRUE, text = 'Gene Value A 12 A 10 B 3 B 5 B 6 C 1 D 3 D 4') # aggregate aggregate(df$Value, by = list(df$Gene), max) aggregate(Value ~ Gene, data = df, max) # tapply tapply(df$Value, df$Gene, max) # split + lapply lapply(split(df, df$Gene), function(y) max(y$Value)) # plyr require(plyr) ddply(df, .(Gene), summarise, Value = max(Value)) # dplyr require(dplyr) df %>% group_by(Gene) %>% summarise(Value = max(Value)) # data.table require(data.table) dt <- data.table(df) dt[ , max(Value), by = Gene] # doBy require(doBy) summaryBy(Value~Gene, data = df, FUN = max) # sqldf require(sqldf) sqldf("select Gene, max(Value) as Value from df group by Gene", drv = 'SQLite') # ave df[as.logical(ave(df$Value, df$Gene, FUN = function(x) x == max(x))),] 

Utiliser sqldf et standard sql pour obtenir les valeurs maximales regroupées par une autre variable

https://cran.r-project.org/web/packages/sqldf/sqldf.pdf

 library(sqldf) sqldf("select max(Value),Gene from df1 group by Gene") 

ou

Utiliser l’excellent paquet Hmisc pour une application groupby de la fonction (max) https://www.rdocumentation.org/packages/Hmisc/versions/4.0-3/topics/summarize

 library(Hmisc) summarize(df1$Value,df1$Gene,max) 
 df$Gene <- as.factor(df$Gene) do.call(rbind, lapply(split(df,df$Gene), function(x) {return(x[which.max(x$Value),])})) 

Juste en utilisant la base R