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? 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]])) df.f12.num ## this does not work df.f12.num <- data.frame(unclass(df.f12[1:2])) df.f12.num
Try this: data.matrix(df.f12) On Apr 2, 2005 6:01 AM, Heinz Tuechler <tuechler at gmx.at> 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? > > 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]])) > df.f12.num > ## this does not work > df.f12.num <- data.frame(unclass(df.f12[1:2])) > df.f12.num > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
At 07:15 02.04.2005 -0500, Gabor Grothendieck wrote:>Try this: > >data.matrix(df.f12) >Perfect! This is exactly what I needed. Many thanks, Heinz T?chler>On Apr 2, 2005 6:01 AM, Heinz Tuechler <tuechler at gmx.at> 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? >> >> 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]])) >> df.f12.num >> ## this does not work >> df.f12.num <- data.frame(unclass(df.f12[1:2])) >> df.f12.num >> >> ______________________________________________ >> R-help at stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide!http://www.R-project.org/posting-guide.html>> > >
At 14:26 02.04.2005 +0100, Prof Brian Ripley wrote:>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. >Thank you for your answer. I am sorry for the unprecise formulation `does not work'. I intended `does not solve my problem'. In the meantime Gabor Grothendieck responded with: 'Try this: data.matrix(df.f12)' which is exactly, what I was searching for. Many thanks, Heinz T?chler>> 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
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.numThat 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