我有一个数据框,其中包含一个分组变量(“Gene”)和一个值变量(“Value”):
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
聚合功能能行吗?
在 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))),]
aggregate
的公式方法可以给出更好的输出... - A5C1D2H2I1M1N2O1R2T1df$Gene <- as.factor(df$Gene)
do.call(rbind, lapply(split(df,df$Gene), function(x) {return(x[which.max(x$Value),])}))
只使用基础的 R
https://cran.r-project.org/web/packages/sqldf/sqldf.pdf
library(sqldf)
sqldf("select max(Value),Gene from df1 group by Gene")
或者
使用优秀的Hmisc包进行函数(max)的分组应用 https://www.rdocumentation.org/packages/Hmisc/versions/4.0-3/topics/summarize
library(Hmisc)
summarize(df1$Value,df1$Gene,max)
aggregate(na.omit(Value)~Gene, df, function(x) c(max(x)-min(x)))
- godines
aggregate
可以解决问题。只需使用max
作为相关函数即可。 - A5C1D2H2I1M1N2O1R2T1