studio - superponer graficas en r
Extraiga el valor máximo dentro de cada grupo en un marco de datos (3)
Esta pregunta ya tiene una respuesta aquí:
Tengo un marco de datos con una variable de agrupamiento ("Gene") y una variable de valor ("Valor"):
Gene Value
A 12
A 10
B 3
B 5
B 6
C 1
D 3
D 4
Para cada nivel de mi variable de agrupación, deseo extraer el valor máximo. El resultado debería ser, por lo tanto, un marco de datos con una fila por nivel de la variable de agrupación:
Gene Value
A 12
B 6
C 1
D 4
Podría aggregate
hacer el truco?
Hay muchas posibilidades para hacer esto en R. Aquí están algunos de ellos:
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))),]
Usar sqldf y sql estándar para obtener los valores máximos agrupados por otra variable
https://cran.r-project.org/web/packages/sqldf/sqldf.pdf
library(sqldf)
sqldf("select max(Value),Gene from df1 group by Gene")
o
Uso del excelente paquete Hmisc para una aplicación de función group (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),])}))
Solo usando la base R