# [R] Merging factor levels.

Peter Dalgaard BSA p.dalgaard at biostat.ku.dk
Tue Nov 13 13:52:04 CET 2001

```Göran Broström <gb at stat.umu.se> writes:

> Thanks to John and Brian, who helped me out on this one. But, one question
> about 'ifelse' and factors remains to be answered:
>
> > table(okk)
> okk
>      Other   STORKAGE SKELLEFTEA    FALMARK       BOLE
>      14098        560        346        526        332
>
> > for (i in 1:length(okk)) if(okk[i] == "BOLE") okk[i] <- "Other"
> > table(okk)
> okk
>      Other   STORKAGE SKELLEFTEA    FALMARK       BOLE
>      14430        560        346        526          0
> > is.factor(okk)
> [1] TRUE
>
> works. I think of 'ifelse' as a replacement for the loop, so why doesn't
> it work here?
...
> > > > > okk <- ifelse(okk == "NEAR_TOWN", "Other", okk)
> > > > > table(okk)
> > > > okk
> > > >     1     2     3     4     5 Other
> > > > 14064   560   346   526   332    34
> > > > > is.factor(okk)
> > > > [1] FALSE

This is a quirk of ifelse (and an S-PLUS compatible quirk): factor
arguments are converted to integer. Even in this case:

x <- factor(LETTERS)
ifelse(rep(TRUE,26),x,x)

If there is a logic to this, then it would probably be that ifelse()
can't know whether to take attributes from the "if" or the "else"
parts, so it deletes attributes from both.

--
O__  ---- Peter Dalgaard             Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics     2200 Cph. N
(*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```