Rのifelseステートメントにnaを含める方法


多くの場合、R でifelseステートメントを使用して、既存の列の値に基づく値を持つ新しい列をデータ フレームに作成したい場合があります。

これを行うには、次の基本構文を使用できます。

 df$new_column<- ifelse(df$col1 == ' A ', ' val_if_true ', ' val_if_false ')

ただし、列に NA 値が存在する場合、新しい列の値は自動的に NA になります。

これを回避するには、次のように!is.na()関数を使用します。

 df$new_column<- ifelse(df$col1 == ' A ' & !is. na (df$col1) , ' val_if_true ', ' val_if_false ')

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

例: R の ifelse ステートメントに NA を含める

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

 #create data frame
df <- data. frame (player=c('A', 'B', 'C', 'D', 'E', 'F'),
                 conf=c('West', NA, 'West', 'East', 'East', 'East'),
                 points=c(30, 35, 11, 18, 14, NA))

#view data frame
df

  player conf points
1 A West 30
2 B <NA> 35
3 C West 11
4 D East 18
5 E East 14
6 F East NA

ここで、次の値を取るclassという名前の新しい列を作成しようとするとします。

  • conf が「West」と等しい場合は「West_Player」
  • conf が「West」と等しくない場合は「Other」

次のコードは、これを行う方法を示しています。

 #create new column called 'class'
df$class <- ifelse(df$conf == ' West ', ' West_Player ', ' Other ')

#view updated data frame
df

  player conf points class
1 A West 30 West_Player
2 B <NA> 35 <NA>
3 C West 11 West_Player
4 D East 18 Other
5 E East 14 Other
6 F East NA Other

conf列の対応する値が NA に等しいため、行 2 のクラス値は NA に等しいことに注意してください。

これを回避するには、次のように!is.na()関数を使用します。

 #create new column called 'class'
df$class <- ifelse(df$conf == ' West ' & !is. na (df$conf), ' West_Player ', ' Other ')

#view updated data frame
df

  player conf points class
1 A West 30 West_Player
2 B <NA> 35 Other
3 C West 11 West_Player
4 D East 18 Other
5 E East 14 Other
6 F East NA Other

2 行目のClass値が NA ではなく「Other」になっていることに注意してください。

!is.na()関数を使用して、新しいクラス列の値が「West_Player」になるためには、 conf列の値が「West」と等しく NA と等しくなければならないことを指定しました。

追加リソース

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

R でネストされた If Else ステートメントを記述する方法
R で case ステートメントを記述する方法
Rでデータフレームに複数の列を追加する方法

コメントを追加する

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