Basil
Basil

Reputation: 1004

Mutate across multiple columns

I want to recode values in the fruit2 and fruit3 columns without having to write out the recode function for each column.

fruit1<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit2<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit3<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)%>%
  mutate(fruit2=recode(fruit2, Apples="Apple"),
        fruit3=recode(fruit2, Apples="Apple"),             
                       )

I understand you can use the across verb to do things across columns but I cant get it to work. I have so far:

data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)%>%
  mutate(across(c(fruit2,fruit3)),recode(Apples="Apple"))

Can anyone suggest any edits to the code to make it work?

Upvotes: 0

Views: 143

Answers (2)

Karthik S
Karthik S

Reputation: 11546

You could also use replace

data %>% mutate(across(2:3, ~  replace(., . == 'Apples','Apple')))
   fruit1  fruit2  fruit3
1  Apples   Apple   Apple
2 Oranges Oranges Oranges
3  Apples   Apple   Apple
4  Grapes  Grapes  Grapes
5  Apples   Apple   Apple
6 Oranges Oranges Oranges

Upvotes: 1

jared_mamrot
jared_mamrot

Reputation: 26705

Like this?

library(tidyverse)
fruit1<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit2<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit3<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)
data %>%
  mutate(across(c(fruit2, fruit3), ~ recode(.x, Apples="Apple")))
#>    fruit1  fruit2  fruit3
#> 1  Apples   Apple   Apple
#> 2 Oranges Oranges Oranges
#> 3  Apples   Apple   Apple
#> 4  Grapes  Grapes  Grapes
#> 5  Apples   Apple   Apple
#> 6 Oranges Oranges Oranges

Upvotes: 1

Related Questions