1. ホーム
  2. r

[解決済み] 各グループの中で最大値を持つ行を選択する。

2022-07-30 13:21:52

質問

被験者ごとに複数のオブザベーションを持つデータセットがあります。各被験者について、'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はそれぞれ5、17、5と最大のpt値を持っています。

最初に各被験者の最大のpt値を見つけ、次に、この観測値を別のデータフレームに入れるにはどうしたらよいでしょうか。結果として得られるデータフレームは、各被験者の最大のpt値のみを持っているはずです。

どのように解決するのですか?

ここでは 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

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