Dplyr で条件付きフィルターを使用する方法
次の基本構文を使用すると、R のdplyrパッケージの関数を使用してデータ フレームに条件付きフィルターを適用できます。
library (dplyr) #filter data frame where points is greater than some value (based on team) df %>% filter(case_when(team==' A ' ~ points > 15, team==' B ' ~ points > 20, TRUE ~ points > 30))
この特定の例では、チーム列の値を条件として、ポイント列の値が特定の値より大きいデータ フレーム内の行をフィルター処理します。
次の例は、この構文を実際に使用する方法を示しています。
例: dplyr で条件付きフィルターを使用する方法
R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'), points=c(10, 12, 17, 18, 24, 29, 29, 34, 35)) #view data frame df team points 1 to 10 2 to 12 3 to 17 4 B 18 5 B 24 6 B 29 7 C 29 8 C 34 9 C 35
ここで、次の条件付きフィルターを適用するとします。
- ポイントが 15 を超えるチームAプレーヤーのラインのみを維持します。
- ポイントが 20 を超えるチームBプレーヤーのラインのみを維持します。
- ポイントが 30 を超えているチームCプレーヤーのラインのみを維持します。
dplyrパッケージのfilter()関数とcase_when()関数を使用して、この条件付きフィルターをデータ フレームに適用できます。
library (dplyr) #filter data frame where points is greater than some value (based on team) df %>% filter(case_when(team==' A ' ~ points > 15, team==' B ' ~ points > 20, TRUE ~ points > 30)) team points 1 to 17 2 B 24 3 B 29 4 C 34 5 C 35
データ フレーム内の行は、チーム列の値を条件として、ポイント列の値が特定の値より大きい場合にフィルターされるようになりました。
注 #1 : case_when()関数では、最後の引数でTRUEを使用して、チーム列内の「A」または「B」に等しくないすべての値を表します。
注 #2 : dplyr case_when()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、dplyr で他の一般的な機能を実行する方法を説明します。
dplyrを使用して行番号でフィルタリングする方法
dplyrを使って複数の条件でフィルタリングする方法
dplyr で「含まれていない」フィルターを使用する方法