[解決済み] dplyrで各グループの最大値を持つ行を選択する方法は?[重複している]。
2022-05-08 15:45:06
質問
<余談
dplyrで各グループの最大値を持つ行を選択したい。
まず、私の質問を示すために、いくつかのランダムなデータを生成します。
set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
plyrでは、この行を選択するためにカスタム関数を使用することができました。
library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
dplyrでは、このコードを使って最大値を取得していますが、最大値を持つ行(この場合はC列)は取得できていません。
library(dplyr)
df %>% group_by(A, B) %>%
summarise(max = max(value))
どうすれば実現できるでしょうか?何か提案があれば、ありがとうございます。
sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C
[5] LC_TIME=English_Australia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.2 plyr_1.8.1
loaded via a namespace (and not attached):
[1] assertthat_0.1.0.99 parallel_3.1.0 Rcpp_0.11.1
[4] tools_3.1.0
解決方法は?
これを試してみてください。
result <- df %>%
group_by(A, B) %>%
filter(value == max(value)) %>%
arrange(A,B,C)
動作しているようです。
identical(
as.data.frame(result),
ddply(df, .(A, B), function(x) x[which.max(x$value),])
)
#[1] TRUE
コメントでご指摘の通りです。
slice
のように、ここで優先されるかもしれません。
以下の@RoyalITSさんの回答
厳密に1グループにつき1行だけ欲しい場合。この回答は、同じ最大値を持つものが複数ある場合、複数の行を返します。
関連
-
二項演算子への非数値引数を報告するR言語エラー
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
[解決済み] Rでcは何をするのですか?重複] [重複
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み】私のggplot2構文が賢明であるときに、R CMDチェック「no visible binding for global variable」注記を処理するにはどうすればよいですか?
-
[解決済み] セッションが作成されません。このバージョンのChromeDriverはChromeバージョンにしか対応していません ChromeDriver ChromeでSeleniumを使用した場合の74エラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R LanguageError in hist.default() : 'x' は数値でなければなりません.
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
[R] is.data.frame(x) のエラー : (リスト) オブジェクトを 'double' 型に強制できない。
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み] Rで複数行のコメントを持つことは可能ですか?[重複している]。
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] ggplot2 の軸ラベルを回転させ、間隔を空ける
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法