dplyr の distinct のカウントを読みやすい方法で取得する
2023-07-13 04:01:35
質問
私はdplyrを使用する新しい人です。 私はグループ内の明確な値を計算する必要があります。これはテーブルの例です。
data=data.frame(aa=c(1,2,3,4,NA), bb=c('a', 'b', 'a', 'c', 'c'))
などができるのは知っています。
by_bb<-group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))
しかし、私はユニークな要素のカウントが必要な場合?
できるんです。
> summarise(by_bb,length(unique(unlist(aa))))
bb length(unique(unlist(aa)))
1 a 2
2 b 1
3 c 2
で、NAを除外したい場合は、そうします。
> summarise(by_bb,length(unique(unlist(aa[!is.na(aa)]))))
bb length(unique(unlist(aa[!is.na(aa)])))
1 a 2
2 b 1
3 c 1
しかし、それは 私にはちょっと読めません . このような要約をするのに良い方法はないでしょうか?
どのように解決するのですか?
このオプションはどうでしょうか。
data %>% # take the data.frame "data"
filter(!is.na(aa)) %>% # Using "data", filter out all rows with NAs in aa
group_by(bb) %>% # Then, with the filtered data, group it by "bb"
summarise(Unique_Elements = n_distinct(aa)) # Now summarise with unique elements per group
#Source: local data frame [3 x 2]
#
# bb Unique_Elements
#1 a 2
#2 b 1
#3 c 1
使用方法
filter
を使うと
aa
が NA である行をフィルタリングし、次に列でデータをグループ化します。
bb
のユニークな要素の数を数えてまとめます。
aa
のグループごとに
bb
.
見ての通り、パイプ演算子を使っています。
%>%
これは、dplyrを使用する際にコマンドを一緒に"pipe" または"chain" するために使用することができるものです。これは、より自然であるため、読みやすいコードを書くのに役立ちます。例えば、左から右へ、上から下へとコードを書き、(例のコードのように)内側から外側へと深く入れ子にすることはありません。
編集する
質問の最初の部分で、あなたはこう書きました。
などができることは知っています。
by_bb<-group_by(data, bb, add = TRUE) summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))
ここでは、そのための別のオプション(同じ列(複数可)にいくつもの関数を適用する)を紹介します。
data %>%
filter(!is.na(aa)) %>%
group_by(bb) %>%
summarise_each(funs(mean, max, sum, n_distinct), aa)
#Source: local data frame [3 x 5]
#
# bb mean max sum n_distinct
#1 a 2 3 4 2
#2 b 2 2 2 1
#3 c 4 4 4 1
関連
-
R - ユークリッド距離の計算を簡単にする方法
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] 文字列ベクトルを代入して、列名を持つ空のデータフレームを作成する?重複
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] data.frameの1つの列の名前を変更する方法は?
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み] テーブルをデータフレームに変換する方法
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする
最新
-
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言語ダウンロード機能 download.fileとダウンロード解析
-
[解決済み] Rで複数行のコメントを持つことは可能ですか?[重複している]。
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] Rで文字列から最後のn文字を抽出する
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み] データフレームのカラムのデータ型を決定する
-
[解決済み] テーブルをデータフレームに変換する方法