cs0815
cs0815

Reputation: 17388

remapping factor levels in R function or even easier

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

Answers (2)

Sandipan Dey
Sandipan Dey

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

akrun
akrun

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

Related Questions