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 の case_when() の概要

次の例は、この構文を実際に使用する方法を示しています。

例: 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 で「含まれていない」フィルターを使用する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です