dplyr 1.0.2を使用すると、これを行う2つの方法があります。1つはロングハンドで、もう1つは動詞across()を使用します。
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)
長い間、動詞はmax()ですが、na.rm = TRUEに注意してください。これは、閉じた質問のようにNAがある例に役立ちます。行が互いに素でNAを含むデータフレーム内の行をマージします。
group %>%
group_by(Subject) %>%
summarise(pt = max(pt, na.rm = TRUE),
Event = max(Event, na.rm = TRUE))
これは、列が数個しかない場合は問題ありませんが、テーブルに多数の列がある場合は、cross()が役立ちます。この動詞の例は、多くの場合、summarise(across(start_with ...)を使用していますが、この例では、列が同じ文字で始まっていません。変更するか、位置をリストすることができます。
group %>%
group_by(Subject) %>%
summarise(across(1:ncol(group)-1, max, na.rm = TRUE, .names = "{.col}"))
動詞across()1は、最初の実際の列の後の最初の列を参照するため、ncol(group)を使用すると、列が多すぎるため機能しません(3ではなく4の位置になります)。