반응형
데이터 프레임의 각 그룹 내에서 최대 값 추출
이 질문에 이미 답변이 있습니다.
그룹화 변수 ( "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
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을 사용하여 다른 변수로 그룹화 된 최대 값 가져 오기
https://cran.r-project.org/web/packages/sqldf/sqldf.pdf
library(sqldf)
sqldf("select max(Value),Gene from df1 group by Gene")
또는
Using the excellent Hmisc package for a groupby application of function (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),])}))
Just using base R
반응형
'IT Share you' 카테고리의 다른 글
transcluded 범위가있는 지시문에서 양방향 바인딩이 작동하지 않음 (0) | 2020.12.10 |
---|---|
다른 루트 디렉토리에 대해 xampp 웹 서버를 구성하는 방법 (0) | 2020.12.10 |
git pull 및 git push에 대한 다른 기본 원격 (추적 분기) (0) | 2020.12.10 |
JDBC로 일괄 INSERTS를 수행하는 효율적인 방법 (0) | 2020.12.10 |
C # Random.Next-상한을 반환하지 않습니까? (0) | 2020.12.10 |