[R] factor to numeric in data.frame

Prof Brian Ripley ripley at stats.ox.ac.uk
Sat Apr 2 15:26:05 CEST 2005


On Sat, 2 Apr 2005, Heinz Tuechler wrote:

> Dear All,
>
> Assume I have a data.frame that contains also factors and I would like to
> get another data.frame containing the factors as numeric vectors, to apply
> functions like sapply(..., median) on them.
> I read the warning concerning as.numeric or unclass, but in my case this
> makes sense, because the factor levels are properly ordered.
> I can do it, if I write for each single column "unclass(...), but I would
> like to use indexing, e.g. unclass(df[1:10]).
> Is that possible?

Yes: unclass is applied to a column and not the data frame.

newdf <- df
newdf[1:10] <- lapply(newdf[1:10], unclass)

BTW, please read the posting guide, and do not say `does not work' when it 
patently does work as documented.

> Thanks,
> Heinz Tüchler
>
> ## Example:
> f1 <- factor(c(rep('c1-low',2),rep('c2-med',5),rep('c3-high',3)))
> f2 <- factor(c(rep('c1-low',5),rep('c2-low',3),rep('c3-low',2)))
> df.f12 <- data.frame(f1,f2) # data.frame containing factors
>
> ## this does work
> df.f12.num <- data.frame(unclass(df.f12[[1]]),unclass(df.f12[[2]]))
> df.f12.num
> ## this does not work
> df.f12.num <- data.frame(unclass(df.f12[[1:2]]))

Yes, it does work.  What do you think [[1:2]] does?   Please RTFM.

> ## this does not work
> df.f12.num <- data.frame(unclass(df.f12[1:2]))
> df.f12.num

That also works: unclassing a data frame gives a list.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


More information about the R-help mailing list