Dplyr:如何在多个条件下使用 mutate()


您可以在dplyr中使用以下基本语法来使用mutate()函数根据多个条件创建新列:

 library (dplyr)

df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

这种特殊的语法创建一个名为class的新列,它采用以下值:

  • 如果球队等于 A 并且分数大于或等于 20,则 A_Good
  • A_Bad如果球队等于 A 并且分数小于 20。
  • B_Good如果球队等于 B 并且分数大于或等于 20。
  • 如果前面的条件都不满足,则B_Bad

以下示例展示了如何在实践中使用此语法。

相关:如何在 dplyr 中使用 case_when()

示例:在 dplyr 中使用 mutate() 并具有多个条件

假设我们在 R 中有以下数据框,其中包含有关各种篮球运动员的信息:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 points=c(22, 30, 34, 19, 14, 12, 39, 15, 22, 25))

#view data frame
df

   team points
1 to 22
2 to 30
3 to 34
4 to 19
5 to 14
6 B 12
7 B 39
8 B 15
9 B 22
10 B 25

我们可以使用以下语法和mutate()函数来创建一个名为class的新列,其值基于teampoint列中的值:

 library (dplyr)
#add new column based on values in team and points columns
df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

#view updated data frame
df

   team points class
1 A 22 A_Good
2 A 30 A_Good
3 A 34 A_Good
4 A 19 A_Bad
5 A 14 A_Bad
6 B 12 B_Bad
7 B 39 B_Good
8 B 15 B_Bad
9 B 22 B_Good
10 B 25 B_Good

 新的班级列根据球队积分列中的值获取值。

例如,第一行在球队列中的值为 A,并且分数值大于或等于 20,因此它在新班级列中收到的值为A_Good

请注意,在本示例中,我们使用&符号作为“AND”运算符来检查两个条件是否都为 true,然后再在列中分配值。

但是,我们可以使用|符号作为“OR”运算符,用于在列中分配值之前检查是否满足两个条件中的任何一个。

其他资源

以下教程解释了如何在 dplyr 中执行其他常见任务:

dplyr:如果列包含字符串,如何改变变量
dplyr:如何使用 mutate() 更改因子级别
dplyr:如何使用 across() 函数

添加评论

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