Dplyr で case_when() を使用する方法


R のdplyrパッケージのcase_when()関数を使用して、既存の変数から新しい変数を作成できます。

この関数は次の基本構文を使用します。

 library (dplyr)

df %>%
  mutate (new_var = case_when (var1 < 15 ~ ' low ',
                             var2 < 25 ~ ' med ',
                             TRUE ~ ' high '))

TRUE は「else」ステートメントと同等であることに注意してください。

次の例は、次のデータ フレームでこの関数を実際に使用する方法を示しています。

 #create data frame
df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1 AJ G 12 5
2 Bob F 15 7
3 Chad F 19 7
4 Dan G 22 12
5 Eric C 32 11
6 Frank NA NA NA

例 1: 既存の変数から新しい変数を作成する

次のコードは、値がポイント列から導出される、 qualityという新しい変数を作成する方法を示しています。

 df %>%
mutate (quality = case_when (points > 20 ~ ' high ',
                             points > 15 ~ ' med ',
                             TRUE ~ ' low ' ))

  player position points assists quality
1 AJ G 12 5 low
2 Bob F 15 7 low
3 Chad F 19 7 med
4 Dan G 22 12 high
5 Eric C 32 11 high
6 Frank NA NA NA low

case_when()関数が新しい列の値を作成する方法を正確に示します。

  • ポイント列の値が 20 より大きい場合、品質列の値は「高」になります。
  • それ以外の場合、ポイント列の値が 15 より大きい場合、品質列の値は「中」になります。
  • それ以外の場合、ポイント列の値が 15 以下 (または NA などの欠損値) の場合、品質列の値は「低」になります。

例 2: 複数の変数から新しい変数を作成する

次のコードは、値がポイント列アシスト列から導出される、 qualityという新しい変数を作成する方法を示しています。

 df %>%
mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA average

is.na()関数を使用して、文字列を NA 値に明示的に割り当てることもできることに注意してください。

 df %>%
mutate (quality = case_when (is. na (points) ~ ' missing ',
                             points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA missing

追加リソース

Rで線を配置する方法
R でグループごとの観測値をカウントする方法
Rで特定の文字列を含む行をフィルタリングする方法

コメントを追加する

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