[R] as.data.frame.table() to convert by() output to a data frame

David Winsemius dwinsemius at comcast.net
Wed Nov 25 23:55:00 CET 2009


On Nov 25, 2009, at 4:11 PM, Michael Ash wrote:

> Dear all,
>
> This seems to be working, but I'd like to make sure that I'm not doing
> anything wrong.
>
> I am using by() to construct a complicated summary statistic by
> several factors in my data (specifically, the 90-50 income ratio by
> city and race).
>
> cityrace.by <- by(microdata, list(microdata$city,microdata$race),
> function (x) quantile(x$income, probs=0.9) / quantile(x$income,
> probs=0.5) )
>
> I would now like to use the data created by by() as a dataset with
> city-race as the unit of observation.
>
> However, cityrace.data <- as.data.frame(cityrace.by) does not work  
> because
> "Error in as.data.frame.default(city.by) :
>  cannot coerce class "by" into a data.frame"
>
> The following is not a documented use of as.data.frame.table(), but it
> seems to work.  It gives the columns slightly strange names, including
> "Freq" for the statistic computed in by by() but otherwise, the
> dataframe is indexed by city and race with the 90-50 ratio as the
> variable
>
> cityrace.data <- as.data.frame.table(cityrace.by)

If the by-object you get happens to be a 2d array, then why not.  
Tables are matrices after all.

 > tt <- table(c(1,1), c(1,1))
 > tt

     1
   1 2
 > is.matrix(tt)
[1] TRUE

> -- 


David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list