📜  使用 case_when()函数在 R Dplyr 包中使用 case when 语句

📅  最后修改于: 2022-05-13 01:55:35.658000             🧑  作者: Mango

使用 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 语句并使用 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)
)

输出:

在向量中使用 case_when