Как включить na в оператор ifelse в r


Часто вам может потребоваться использовать оператор ifelse в R для создания нового столбца во фрейме данных, значения которого основаны на значениях существующего столбца.

Для этого вы можете использовать следующий базовый синтаксис:

 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 ')

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: включить NA в оператор ifelse в R

Предположим, у нас есть следующий кадр данных в 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 , который принимает следующие значения:

  • «West_Player», если conf равен «West»
  • «Другое», если conf не равно «Западному».

Следующий код показывает, как это сделать:

 #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

Обратите внимание, что значение класса в строке 2 равно NA, поскольку соответствующее значение в столбце conf равно 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 теперь равно «Другое», а не «НП».

Используя функцию !is.na() , мы указали, что значение в столбце conf должно быть равно «West» , а не равно NA, чтобы значение в столбце нового класса было «West_Player».

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:

Как написать вложенный оператор If Else в R
Как написать оператор Case в R
Как добавить несколько столбцов во фрейм данных в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *