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でデータフレームに複数の列を追加する方法