Reputation: 1004
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
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
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