使用 case_when()函数在 R Dplyr 包中使用 case when 语句
本文重点介绍 R 编程语言中使用 Dplyr 包中的 case_when()函数的 case when 语句。
Case when是一种机制,我们可以使用它来向量化一堆 if 和 else if 语句。简而言之,使用 case when 语句我们评估条件表达式,并基于此做出决策。例如,假设我们要检查候选人是否有资格投票。为了解决这个问题,我们可以评估他的年龄,如果大于 18 我们将允许他投票,否则他没有资格。
R中的情况:
R 为我们提供了 case_when()函数,使用它我们可以在 R 中实现 case when。它相当于 SQL 中的“case when”语句。
句法:
case_when(expression)
Here,
- expression: It represent a condition expression
方法一:执行 case when 语句并使用 mutate函数后创建一个新变量:
R中的变异函数用于添加新创建的变量,它还保留现有变量。
例子:
在这个例子中,我们正在创建一个包含汽车品牌、名称、价格、税金的数据框。现在在 mutate()函数的帮助下,我们正在创建一个附加列 (Price_Status),它将在评估 case_when()函数中使用的价格后存储字符串字面量:高、平均和低。
R
# Creating a new variable using case_when() and mutate() function
# Import the library
library(dplyr)
# Creating a dataframe
data_frame = data.frame(Brand=c("Maruti Suzuki", "Tata Motors",
"Mahindra", "Mahindra", "Maruti Suzuki"),
Car=c("Swift", "Nexon", "Thar", "Scorpio", "WagonR"),
Price=c(400000, 1000000, 500000, 1200000, 900000),
Tax=c(2000, 4000, 2500, 5000, 3500))
# Using case_when() to create new variable
data_frame % > % mutate(Price_status=case_when(Price >= 500000 & Price <= 900000 ~ "Average", Price > 900000 ~ "High", TRUE ~ "Low"))
R
# Creating a new variable using case_when() and mutate() function
# and handling unwanted values
# Import the library
library(dplyr)
data_frame = data.frame(Brand=c("Maruti Suzuki", "Tata Motors",
"Mahindra", "Mahindra", "Maruti Suzuki"),
Car=c("Swift", "Nexon", "Thar", "Scorpio", "WagonR"),
Price=c(400000, 1000000, 500000, 1200000, NA),
Tax=c(2000, 4000, 2500, 5000, 3500))
# Case_when() to create new variable (or column) with NIL
data_frame % > % mutate(Price_band=case_when(is.na(Price) ~ "NIL", Price >= 500000 & Price <= 900000 ~ "Average", Price > 900000 ~ "High", TRUE ~ "Low"))
R
# R program using case_when through sapply() function
# Import the library
library(dplyr)
# Creating a dataframe
data_frame = data.frame(Brand = c("Maruti Suzuki","Tata Motors",
"Mahindra","Mahindra", "Maruti Suzuki"),
Car = c("Swift","Nexon","Thar", "Scorpio", "WagonR"),
Price = c(400000,1000000,500000,1200000,NA),
Tax = c(2000,4000,2500,5000,3500))
# Case_when() to create new variable
data_frame$Vehicle_Type <- sapply(data_frame$Brand, switch, "Tata Motors"='Car',
"Mahindra"='Car', "Maruti Suzuki" = 'Car')
data_frame
R
# R program using case_when() function to manipulate a vector
# Importing library
library(dplyr)
# Creating a vector
vector <- seq(2, 20, by = 2)
# Using case_when() function
case_when(
# If the value is divisible by 4
# then replace it with "Yes"
vector %% 4 == 0 ~ "Yes",
TRUE ~ as.character(vector)
)
输出:
方法二:使用 Case when 语句处理 NA
再次查看我们在上面创建的 data_frame 的 Price 列。有些汽车的价格值等于 NA。在应用 case_when()函数时,必须小心处理。 R 为我们提供了 is.na()函数,我们可以使用它来处理 na 值。
例子:
在这个例子中,我们正在创建一个包含汽车品牌、名称、价格、税金的数据框。现在在 mutate()函数的帮助下,我们正在创建一个附加列 (Price_Status),它将在评估 case_when()函数中使用的价格后存储字符串字面量:高、平均和低。请注意,对于价格等于 NA 的汽车,我们在 Price_Status 列的相应位置添加“NIL”。
R
# Creating a new variable using case_when() and mutate() function
# and handling unwanted values
# Import the library
library(dplyr)
data_frame = data.frame(Brand=c("Maruti Suzuki", "Tata Motors",
"Mahindra", "Mahindra", "Maruti Suzuki"),
Car=c("Swift", "Nexon", "Thar", "Scorpio", "WagonR"),
Price=c(400000, 1000000, 500000, 1200000, NA),
Tax=c(2000, 4000, 2500, 5000, 3500))
# Case_when() to create new variable (or column) with NIL
data_frame % > % mutate(Price_band=case_when(is.na(Price) ~ "NIL", Price >= 500000 & Price <= 900000 ~ "Average", Price > 900000 ~ "High", TRUE ~ "Low"))
输出:
方法3:在R中使用switch语句
R 允许我们使用 sapply() 和 switch 语句来构造一个新变量,该变量可以作为数据框中的列存在。
例子:
在此示例中,我们创建了一个名为“Vehicle_Type”的附加列,我们正在使用带有 switch 语句的 sapply()函数,对于各个品牌,我们将 Vehicle_Type 列相应位置的值标记为“车”。
R
# R program using case_when through sapply() function
# Import the library
library(dplyr)
# Creating a dataframe
data_frame = data.frame(Brand = c("Maruti Suzuki","Tata Motors",
"Mahindra","Mahindra", "Maruti Suzuki"),
Car = c("Swift","Nexon","Thar", "Scorpio", "WagonR"),
Price = c(400000,1000000,500000,1200000,NA),
Tax = c(2000,4000,2500,5000,3500))
# Case_when() to create new variable
data_frame$Vehicle_Type <- sapply(data_frame$Brand, switch, "Tata Motors"='Car',
"Mahindra"='Car', "Maruti Suzuki" = 'Car')
data_frame
输出:
方法 4:在向量中使用 case_when
R 还提供了使用 case_when 来操作向量的工具。
例子:
考虑下面的源代码。在这个例子中,我们首先检查向量中的当前值是否可以被 4 整除,如果是,那么我们将用字符串“Yes”替换 4 的倍数。
例子:
R
# R program using case_when() function to manipulate a vector
# Importing library
library(dplyr)
# Creating a vector
vector <- seq(2, 20, by = 2)
# Using case_when() function
case_when(
# If the value is divisible by 4
# then replace it with "Yes"
vector %% 4 == 0 ~ "Yes",
TRUE ~ as.character(vector)
)
输出: