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 中使用 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的新列,其值基于team和point列中的值:
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() 函数