[R] Odp: data.frame: How to get the classes of all components and how to remove their factor structure?

Petr PIKAL petr.pikal at precheza.cz
Tue Jun 28 09:49:22 CEST 2011


> 
> Dear expeRts,
> 
> I have two questions concerning data frames:
> (1) How can I apply the class function to each component in a 
data.frame? 
> As you can see below, applying class to each column is not the right 
> approach; applying it to each component seems bulky.
> (2) After transforming the data frame a bit, the classes of certain 
> components change to factor. How can I remove the factor structure?
> 
> Cheers,
> 
> Marius
> 
> x <- c(2004:2010, 2002:2011, 2000:2011)
> df <- data.frame(x=x, group=c(rep("low",7), rep("middle",10), 
rep("high",12)), 
>                  y=x+100*runif(length(x))) 
> 
> ## Question (1): why do the following lines do not give the same 
"class"?
> apply(df, 2, class)
> class(df$x)
> class(df$group)
> class(df$y)
> 
> df. <- as.data.frame(xtabs(y ~ x + group, data=df))
> 
> class(df.$x)
> class(df.$group)
> class(df.$Freq)
> 
> ## Question (2): how can I remove the factor structure from x?
> df.$x <- as.numeric(as.character(df.$x)) # seems bulky; note that 

If you do it often you can

unfactor <- function(x) as.numeric(as.character(x))
df.$x <- unfactor(df.$x)

or you can use 
df. <- as.data.frame(xtabs(y ~ x + group, data=df), 
stringsAsFactors=FALSE)
df.$x <- as.numeric(df.$x)

But it seems to me that it is not much less bulkier.

Regards
Petr


> as.numeric(df.$x) is not correct
> class(df.$x)
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list