如何在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 中执行其他常见任务:

如何在 R 中编写嵌套的 If Else 语句
如何在 R 中编写 case 语句
如何在R中向数据框添加多列

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注