在数据框中提取每个组内的最大值

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

` `Gene Value A 12 B 6 C 1 D 4` `

`aggregate`做到这一点吗？

` `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))),]` `

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

` `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),])}))` `