1. ホーム
  2. r

データフレーム内の各グループ内の最大値を抽出する【重複】。

2023-10-26 12:15:25

質問

グループ化変数("Gene")と値変数("Value")を持つデータフレームを持っています。

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

グループ化変数の各レベルについて、最大値を抽出したいと思います。したがって、結果はグループ化変数のレベルごとに1行のデータフレームになるはずです。

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