Skip to content

recode according to old levels

3 messages · Andreas Wittmann, PIKAL Petr, Peter Ehlers

#
Dear R-users,

i try to recode a factor according to old levels

F <- factor(sample(c(rep("A", 4), rep("B",2), rep("C",5))))

recode(F, "levels(F)[c(1,3)]='X'; else='Y'")

i tried to work with eval or expression around levels(F)[c(1,3)], but 
nothing seems to work.


Many thanks if anyone could tell me what i've missed and what's the 
problem here.

best regards

Andreas
#
Hi


r-help-bounces at r-project.org napsal dne 18.11.2009 09:24:40:
I am not sure if recode does not want as an input a numeric vector. 
However for recoding levels of factor you can add a vector of new levels 
in correct order.

set.seed(111)
F <- factor(sample(c(rep("A", 4), rep("B",2), rep("C",5))))
levels(F)<-c("X","X","Y")
F
 [1] Y Y X X X Y X X X Y Y
Levels: X Y

or maybe

levels(F)<- ifelse(levels(F) %in% c("A","B"), "X", "Y")

Regards
Petr
http://www.R-project.org/posting-guide.html
#
Andreas Wittmann wrote:
I assume that you mean the recode() function in pkg:car?
(You really should say so.)

Here are a couple of ways to recode the factor:

set.seed(6931)
F <- factor(sample(rep(c("A","B","C"), c(4,2,5))))
lev <- levels(F)

# 1: using car:::recode
F <- recode(F, "lev[c(1,3)] = 'X'; else = 'Y'")

# 2: using base:::levels
levels(F) <- list(X = lev[c(1,3)], Y = lev[-c(1,3)])

  -Peter Ehlers