[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