[解決済み] dplyr のメッセージ `summarise()` が 'x' で再グループ化された出力を解釈するにはどうしたらいいですか (`.groups` 引数で上書き)?
質問
dplyr 開発版 0.8.99.9003 にアップデートしてから group_by と summarise() を実行すると新しいメッセージ(記事タイトル参照)が表示されるようになりました。
以下は、出力を再現する例です。
library(tidyverse)
library(hablar)
df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males
2018,10,1,1,1,1
2018,10,1,1,1,1
2018,11,2,2,2,2
2018,11,2,2,2,2
2019,10,3,3,3,3
2019,10,3,3,3,3
2019,11,4,4,4,4
2019,11,4,4,4,4") %>%
convert(chr(year,week)) %>%
mutate(total_rodents = rowSums(select_if(., is.numeric))) %>%
convert(num(year,week)) %>%
group_by(year,week) %>% summarise(average = mean(total_rodents))
出力されたタイブルは正しいのですが、このメッセージが表示されます。
summarise()
で上書きする)。.groups
引数)
これはどのように解釈すればよいのでしょうか?年と週の両方でグループ化したのに、なぜ「年」だけでグループ化し直したと報告されるのでしょうか?また、オーバーライドとはどういう意味でしょうか、そしてなぜそうしたいのでしょうか?
このメッセージは、dplyr vignette全体に表示されるので、問題を示しているとは思えません。 https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html
など、ごく最近のSOの質問でしか出てこないので、新しいメッセージだと思います。 dplyrを使ってpairwise.wilcox.testの出力を溶かすには? そして R 複数列の集計 (どちらも再グループ化/上書きメッセージには対応していません)。
ありがとうございました。
解決方法は?
これは単なる親切な警告メッセージです。 デフォルトでは、もしグループ化の前に
summarise
で指定された最後のグループ変数を削除します。
group_by
. グループ化変数が1つしかない場合、グループ化属性は
summarise
もし、2つ以上ある場合は、グループ化のための属性は1つになります。 再現可能な例として
library(dplyr)
mtcars %>%
group_by(am) %>%
summarise(mpg = sum(mpg))
#`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 2
# am mpg
#* <dbl> <dbl>
#1 0 326.
#2 1 317.
というメッセージが表示されます。
ungroup
である場合、つまり
group_by
の後に、そのグループ化を削除します。
summarise
mtcars %>%
group_by(am, vs) %>%
summarise(mpg = sum(mpg))
#`summarise()` regrouping output by 'am' (override with `.groups` argument)
# A tibble: 4 x 3
# Groups: am [2]
# am vs mpg
# <dbl> <dbl> <dbl>
#1 0 0 181.
#2 0 1 145.
#3 1 0 118.
#4 1 1 199.
ここでは、最後のグループ化を解除し、'am' で再グループ化します。
を確認すると
?summarise
があり、そこに
.groups
引数で、デフォルトでは
"drop_last"
で、その他のオプションは
"drop"
,
"keep"
,
"rowwise"
.groups - 結果のグループ化構造。
"drop_last":グループ化の最後のレベルをドロップします。バージョン1.0.0以前は、このオプションのみがサポートされていました。
"drop"。すべてのレベルのグループ化を解除します。
"keep"。.dataと同じグループ化構造。
"rowise"。各行が独立したグループとなる。
.groupsが指定されていない場合、すべての結果がサイズ1の場合は"drop_last"、サイズが異なる場合は"keep"のいずれかが表示されます。さらに、"dplyr.summarise.inform"オプションがFALSEに設定されていない限り、その選択を通知するメッセージが表示されます。
を変更した場合
.groups
で
summarise
というメッセージが表示されますが、グループ属性が削除されているため、メッセージは表示されません。
mtcars %>%
group_by(am) %>%
summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 2 x 2
# am mpg
#* <dbl> <dbl>
#1 0 326.
#2 1 317.
mtcars %>%
group_by(am, vs) %>%
summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 4 x 3
# am vs mpg
#* <dbl> <dbl> <dbl>
#1 0 0 181.
#2 0 1 145.
#3 1 0 118.
#4 1 1 199.
mtcars %>%
group_by(am, vs) %>%
summarise(mpg = sum(mpg), .groups = 'drop') %>%
str
#tibble [4 × 3] (S3: tbl_df/tbl/data.frame)
# $ am : num [1:4] 0 0 1 1
# $ vs : num [1:4] 0 1 0 1
# $ mpg: num [1:4] 181 145 118 199
以前はこの警告が出なかったため、OPが以下のような状況を引き起こす可能性がありました。
mutate
など、グループ化されていないと思い込んでしまい、予期せぬ出力になってしまいます。 現在は、この警告によって、グループ化属性があることに注意するようにとの指示がユーザーに与えられます
注
.groups
は、現在
experimental
のライフサイクルに含まれます。 そのため、将来のリリースで動作が変更される可能性があります。
同じグループ化変数に基づくデータの変換が必要かどうか(あるいは必要ないか)に応じて、以下のように異なるオプションを選択できます。
.groups
.
関連
-
R: hclust(d, method = method)でのエラー : 外部関数呼び出しは NA/NaN/Inf(arg10) を持つことができません。
-
R LanguageError in hist.default() : 'x' は数値でなければなりません.
-
R - ユークリッド距離の計算を簡単にする方法
-
R言語における共通関数
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] 先頭と末尾の空白を削除するにはどうしたらよいですか?
-
[解決済み】set.seed関数を使用する理由
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする
-
[解決済み] セッションが作成されません。このバージョンの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 描画エラー plot.new() : 図形の余白が大きすぎる
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
[解決済み] Rで文字列から文字を削除する
-
[解決済み] Rで2つのグラフを同じプロットで表示する
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] コマンドラインからRスクリプトを実行する
-
[解決済み] ベクトル中のある要素のインデックスを求めるR関数はありますか?
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み】Rスクリプトで警告をグローバルに抑制する方法