如何在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的新列,它采用以下值:
- ‘West_Player’ 如果conf等于 ‘West’
- 如果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
请注意,第 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 行中的Class值现在等于“Other”而不是 NA。
使用!is.na()函数,我们指定conf列中的值必须等于“West” ,并且不等于 NA,以便新类列中的值为“West_Player”。
其他资源
以下教程解释了如何在 R 中执行其他常见任务: