在数据框中提取每个组内的最大值
我有一个数据框与分组variables(“基因”)和值variables(“价值”):
Gene Value A 12 A 10 B 3 B 5 B 6 C 1 D 3 D 4
对于我的分组variables的每个级别,我希望提取最大值。 结果应该是一个数据框,每个级别的分组variables有一行:
Gene Value A 12 B 6 C 1 D 4
aggregate
做到这一点吗?
在R中有很多可能性。下面是其中的一些:
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))),]
使用sqldf和标准的sql来获取由另一个variables分组的最大值
library(sqldf) sqldf("select max(Value),Gene from df1 group by Gene")
要么
使用function优秀的Hmisc软件包(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),])}))
只使用基地R