如何在 dplyr 中使用 case_when()


R 中dplyr包中的case_when()函数可用于从现有变量创建新变量。

该函数使用以下基本语法:

 library (dplyr)

df %>%
  mutate (new_var = case_when (var1 < 15 ~ ' low ',
                             var2 < 25 ~ ' med ',
                             TRUE ~ ' high '))

请注意, TRUE相当于“else”语句。

以下示例展示了如何在实践中使用以下数据框使用此函数:

 #create data frame
df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1 AJ G 12 5
2 Bob F 15 7
3 Chad F 19 7
4 Dan G 22 12
5 Eric C 32 11
6 Frank NA NA NA

示例 1:从现有变量创建新变量

以下代码展示了如何创建一个名为quality的新变量,其值源自points列:

 df %>%
mutate (quality = case_when (points > 20 ~ ' high ',
                             points > 15 ~ ' med ',
                             TRUE ~ ' low ' ))

  player position points assists quality
1 AJ G 12 5 low
2 Bob F 15 7 low
3 Chad F 19 7 med
4 Dan G 22 12 high
5 Eric C 32 11 high
6 Frank NA NA NA low

以下是case_when()函数为新列创建值的具体方式:

  • 如果点数列中的值大于 20,则质量列中的值为“高”。
  • 否则,如果点列中的值大于 15,则质量列中的值为“med”。
  • 否则,如果点列中的值小于或等于 15(或缺失值,例如 NA),则质量列中的值为“低”。

示例 2:从多个变量创建一个新变量

以下代码展示了如何创建一个名为quality的新变量,其值源自辅助列:

 df %>%
mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA average

请注意,我们还可以使用is.na()函数将字符串显式分配给 NA 值:

 df %>%
mutate (quality = case_when (is. na (points) ~ ' missing ',
                             points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA missing

其他资源

如何在R中排列行
如何在 R 中计算每组的观察值
如何在R中过滤包含特定字符串的行

添加评论

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