Reputation: 17388
I am writing a lot of tedious remapping code like this to adjust factor levels:
remapping in function or even easier
levels(temp$sex)[levels(temp$sex)=="1"] <- "male"
I am thinking about writing a function and pass in:
col_name (e.g. sex)
old_value (e.g. 1)
new_value (e.g. male)
what would be the function, which makes the col_name dynamic please or is there a better way to remap levels of factors?
Thanks!
Upvotes: 1
Views: 360
Reputation: 23101
May be like this,
# set.seed(1)
sex <- factor(sample(1:2,10,T))
sex
# [1] 1 2 1 1 2 1 1 1 2 2
# Levels: 1 2
old_values <- levels(sex)
new_values <- c('M', 'F')
sex <- factor(sex, levels=old_values , labels=new_values)
sex
# [1] M F M M F M M M F F
# Levels: M F
Upvotes: 1
Reputation: 887128
It may be useful with fct_recode
library(forcats)
fct_recode(temp$sex, male = "1", female = "2")
Or a named vector can also be passed
levels <- c(male = "1", female = "2")
fct_recode(temp$sex, !!!levels)
Upvotes: 1