J'ai un bloc de données avec une variable de regroupement ("Gene") et une variable de valeur ("Valeur"):
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 devrait 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
Est-ce que aggregate
pourrait faire l'affaire?
Il y a beaucoup de possibilités de le faire dans R. Voici quelques-unes d'entre elles:
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))),]
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
Utiliser sqldf et sql standard 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
Utilisation de l'excellent paquet Hmisc pour une application groupby de function (max) https://www.rdocumentation.org/packages/Hmisc/versions/4.0-3/topics/summarize
library(Hmisc)
summarize(df1$Value,df1$Gene,max)