Dplyr: 複数の条件で mutate() を使用する方法


dplyrで次の基本構文を使用すると、 mutate()関数を使用して、複数の条件に基づいて新しい列を作成できます。

 library (dplyr)

df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

この特定の構文では、次の値を取るclassという新しい列が作成されます。

  • A_チームが A と同等で、ポイントが 20 以上の場合は良好です
  • A_チームが A と同等で、ポイントが 20 未満の場合は悪い
  • B_チームが B と同等で、ポイントが 20 以上の場合は良好。
  • B_前の条件がどれも満たされない場合は不良

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

関連: dplyr で case_when() を使用する方法

例: 複数の条件を指定して dplyr で mutate() を使用する

R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 points=c(22, 30, 34, 19, 14, 12, 39, 15, 22, 25))

#view data frame
df

   team points
1 to 22
2 to 30
3 to 34
4 to 19
5 to 14
6 B 12
7 B 39
8 B 15
9 B 22
10 B 25

mutate()関数で次の構文を使用して、値がチーム列ポイント列の値に基づくクラスという新しい列を作成できます。

 library (dplyr)
#add new column based on values in team and points columns
df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

#view updated data frame
df

   team points class
1 A 22 A_Good
2 A 30 A_Good
3 A 34 A_Good
4 A 19 A_Bad
5 A 14 A_Bad
6 B 12 B_Bad
7 B 39 B_Good
8 B 15 B_Bad
9 B 22 B_Good
10 B 25 B_Good

 新しいクラス列は、チーム列ポイント列の値に基づいた値を受け取ります。

たとえば、最初の行にはチーム列の値が A で、ポイント値が 20 以上であったため、新しいクラス列の値はA_Goodになりました。

この例では、クラス列に値を割り当てる前に、2 つの条件が両方とも true であるかどうかをチェックするために、 &記号を「AND」演算子として使用していることに注意してください。

ただし、 | を使用することもできました。シンボルを「OR」演算子として使用して、クラス列に値を割り当てる前に 2 つの条件のいずれかが満たされているかどうかをチェックします。

追加リソース

次のチュートリアルでは、dplyr で他の一般的なタスクを実行する方法を説明します。

dplyr: 列に文字列が含まれている場合に変数を変更する方法
dplyr: mutate() を使用して因子レベルを変更する方法
dplyr: across() 関数の使用方法

コメントを追加する

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