littleworth
littleworth

Reputation: 5169

How to mutate and assign value based on the presence of string in a vector using dplyr

I have the following data frame:

library(tidyverse)
dat <- mtcars %>% 
  rownames_to_column(var = 'car_name') %>% 
  as.tibble() %>% 
  head(n=5) %>% 
  select(car_name, mpg)

dat
#> # A tibble: 32 x 2
#>    car_name            mpg
#>    <chr>             <dbl>
#>  1 Mazda RX4          21  
#>  2 Mazda RX4 Wag      21  
#>  3 Datsun 710         22.8
#>  4 Hornet 4 Drive     21.4
#>  5 Hornet Sportabout  18.7

Created on 2019-02-20 by the reprex package (v0.2.0).

Given a vector:

good_cars <- c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710")

I want to assign add another column in dat such that whenever the car_name is stored in good_cars I would assign a status as good:

I tried this but failed:

dat %>% 
 mutate(condition = case_when( car_name %in% good_cars == "GOOD" ~ "BAD"))

The result I'd like to get is:

  car_name            mpg condition
  <chr>             <dbl> <chr>    
1 Mazda RX4          21   GOOD      
2 Mazda RX4 Wag      21   GOOD       
3 Datsun 710         22.8 GOOD       
4 Hornet 4 Drive     21.4 BAD      
5 Hornet Sportabout  18.7 BAD

Upvotes: 1

Views: 405

Answers (1)

boski
boski

Reputation: 2467

library(tidyverse)
dat <- mtcars %>% 
  rownames_to_column(var = 'car_name') %>% 
  as.tibble() %>% 
  head(n=5) %>% 
  select(car_name, mpg)

dat%>%mutate(condition=if_else(car_name%in%good_cars,"GOOD","BAD"))
# A tibble: 5 x 3
  car_name            mpg condition
  <chr>             <dbl> <chr>    
1 Mazda RX4          21   GOOD     
2 Mazda RX4 Wag      21   GOOD     
3 Datsun 710         22.8 GOOD     
4 Hornet 4 Drive     21.4 BAD      
5 Hornet Sportabout  18.7 BAD  

Upvotes: 2

Related Questions