[解決済み] dplyrのsummarise。長さが0のグループを出力に残す ".drop=FALSE" と同等な機能
2022-11-08 12:12:42
質問
を使用する場合
summarise
と
plyr
's
ddply
関数では、空のカテゴリはデフォルトでドロップされます。この挙動を変更するには
.drop = FALSE
. しかし、これは
summarise
と
dplyr
. 空のカテゴリを結果に残す他の方法はありますか?
フェイクデータを使った例です。
library(dplyr)
df = data.frame(a=rep(1:3,4), b=rep(1:2,6))
# Now add an extra level to df$b that has no corresponding value in df$a
df$b = factor(df$b, levels=1:3)
# Summarise with plyr, keeping categories with a count of zero
plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE)
b count_a
1 1 6
2 2 6
3 3 0
# Now try it with dplyr
df %.%
group_by(b) %.%
summarise(count_a=length(a), .drop=FALSE)
b count_a .drop
1 1 6 FALSE
2 2 6 FALSE
私が望んでいたものとはちょっと違います。このような
dplyr
と同じ結果を得るための方法はありますか?
.drop=FALSE
で
plyr
?
どのように解決するのですか?
では
dplyr 0.8
group_by
を得た。
.drop
という引数を得ました。
df = data.frame(a=rep(1:3,4), b=rep(1:2,6))
df$b = factor(df$b, levels=1:3)
df %>%
group_by(b, .drop=FALSE) %>%
summarise(count_a=length(a))
#> # A tibble: 3 x 2
#> b count_a
#> <fct> <int>
#> 1 1 6
#> 2 2 6
#> 3 3 0
Moody_Mudskipperさんの回答に合わせて、もうひとつ補足しておきます。を使うことです。
.drop=FALSE
を使用すると、1つ以上のグループ化変数が因子としてコード化されていない場合、潜在的に予期しない結果を与える可能性があります。以下の例を参照してください。
library(dplyr)
data(iris)
# Add an additional level to Species
iris$Species = factor(iris$Species, levels=c(levels(iris$Species), "empty_level"))
# Species is a factor and empty groups are included in the output
iris %>% group_by(Species, .drop=FALSE) %>% tally
#> Species n
#> 1 setosa 50
#> 2 versicolor 50
#> 3 virginica 50
#> 4 empty_level 0
# Add character column
iris$group2 = c(rep(c("A","B"), 50), rep(c("B","C"), each=25))
# Empty groups involving combinations of Species and group2 are not included in output
iris %>% group_by(Species, group2, .drop=FALSE) %>% tally
#> Species group2 n
#> 1 setosa A 25
#> 2 setosa B 25
#> 3 versicolor A 25
#> 4 versicolor B 25
#> 5 virginica B 25
#> 6 virginica C 25
#> 7 empty_level <NA> 0
# Turn group2 into a factor
iris$group2 = factor(iris$group2)
# Now all possible combinations of Species and group2 are included in the output,
# whether present in the data or not
iris %>% group_by(Species, group2, .drop=FALSE) %>% tally
#> Species group2 n
#> 1 setosa A 25
#> 2 setosa B 25
#> 3 setosa C 0
#> 4 versicolor A 25
#> 5 versicolor B 25
#> 6 versicolor C 0
#> 7 virginica A 0
#> 8 virginica B 25
#> 9 virginica C 25
#> 10 empty_level A 0
#> 11 empty_level B 0
#> 12 empty_level C 0
Created on 2019-03-13 by the reprex package (v0.2.1)
関連
-
R言語のエラーメッセージと関連する解決策
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] 情報を損なわずに因数を整数値に変換するには?
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] コマンドラインからRスクリプトを実行する
-
[解決済み] Rでオブジェクト(変数)が定義されているかどうかを確認するには?
-
[解決済み】安定したマッピングを持つggplot2のカテゴリ変数に色を割り当てるには?
-
[解決済み] dplyr のメッセージ `summarise()` が 'x' で再グループ化された出力を解釈するにはどうしたらいいですか (`.groups` 引数で上書き)?
最新
-
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言語です。「接続を開くことができません」解決策
-
[解決済み] Rの二乗偏差の総和の算出
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] リストをデータフレームに変換する
-
[解決済み] Rでロードされているパッケージのバージョンを調べるには?
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] Rで文字列から最後のn文字を抽出する
-
[解決済み] セッションが作成されません。このバージョンのChromeDriverはChromeバージョンにしか対応していません ChromeDriver ChromeでSeleniumを使用した場合の74エラー