各グループで最大値を持つ行を選択する 質問する

各グループで最大値を持つ行を選択する 質問する

各被験者に対して複数の観測値を持つデータセットの場合、各被験者に対して 'pt' の最大値を持つ行を選択します。たとえば、次のデータセットの場合:

ID    <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)

group <- data.frame(Subject=ID, pt=Value, Event=Event)
#   Subject pt Event
# 1       1  2     1
# 2       1  3     1
# 3       1  5     2 # max 'pt' for Subject 1
# 4       2  2     1
# 5       2  5     2
# 6       2  8     1
# 7       2 17     2 # max 'pt' for Subject 2
# 8       3  3     2
# 9       3  5     2 # max 'pt' for Subject 3

被験者 1、2、3 の pt 値はそれぞれ 5、17、5 と最大です。

まず各被験者の最大 pt 値を見つけ、次にこの観察結果を別のデータ フレームに配置するにはどうすればよいでしょうか。結果のデータ フレームには、各被験者の最大 pt 値のみが含まれる必要があります。

ベストアンサー1

解決策は次のとおりですdata.table:

require(data.table) ## 1.9.2
group <- as.data.table(group)

pt各グループ内の最大値に対応するすべてのエントリを保持する場合:

group[group[, .I[pt == max(pt)], by=Subject]$V1]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2

最初の最大値だけを取得したい場合pt:

group[group[, .I[which.max(pt)], by=Subject]$V1]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2

この場合、データ内のどのグループにも複数の最大値が存在しないため、違いはありません。

おすすめ記事