[R] Casting lists to data.frames, analog to SAS

David Winsemius dwinsemius at comcast.net
Wed Jan 14 22:21:32 CET 2009


On Jan 14, 2009, at 4:14 PM, David Winsemius wrote:

>
> On Jan 14, 2009, at 3:56 PM, Matthew Pettis wrote:
>
>> <Resubmitting: Told I had a problem with a character set -- now
>> submitting in plain text>
>>
>> I have a specific question and a general question.
>>
>> Specific Question: I want to do an analysis on a data frame by 2 or
>> more class variables (i.e., use 2 or more columns in a dataframe to  
>> do
>> statistical classing).  Coming from SAS, I'm used to being able to
>> take a data set and have the output of the analysis in a dataset for
>> further manipulation.  I have a data set with vote totals, with one
>> column being the office name being voted on, and the other being the
>> party of the candidate.  My votes are in the column "vc.n".  I did  
>> the
>> analysis I want with:
>>
>> work <- by(sd62[,"vc.n"], sd62[,c("office.nm","party.abbr")], sum)
>>
>> the str() output of work looks like:
>>
>>> str(work)
>> 'by' int [1:9, 1:11] NA 30 NA NA 0 0 0 NA 33 25678 ...
>> - attr(*, "dimnames")=List of 2
>> ..$ office.nm : chr [1:9] "ATTORNEY GENERAL" "GOVERNOR & LT
>> GOVERNOR" "SECRETARY OF STATE" "STATE AUDITOR" ...
>> ..$ party.abbr: chr [1:11] "CP" "DFL" "DFL2" "GP" ...
>> - attr(*, "call")= language by.default(data = sd62[, "vc.n"], INDICES
>> = sd62[, c("office.nm",      "party.abbr")], FUN = sum)
>
> When I use as.data.frame.table on a similarly constructed object I  
> get:
>
> > as.data.frame.table(with(warpbreaks, by(breaks, list(wool,  
> tension), sum)))
>  Var1 Var2 Freq
> 1    A    L  401
> 2    B    L  254
> 3    A    M  216
> 4    B    M  259
> 5    A    H  221
> 6    B    H  169

A more self-documenting call might be:

 > as.data.frame.table(with(warpbreaks, by(breaks, list(Wool=wool,  
Tension=tension), sum)), responseName="Sum" )
   Wool Tension Sum
1    A       L 401
2    B       L 254
3    A       M 216
4    B       M 259
5    A       H 221
6    B       H 169

>
>
>>
> -- 
> David Winsemius
>>
>>
>>
>>
>> work is now a list.  I'd really like to have work be a data frame  
>> with
>> 3 columns: The rows of the first two columns show the office and  
>> party
>> levels being considered, and the third being the sum of the votes for
>> that level combination.  How do I cast this list/output into a data
>> frame?  using 'as.data.frame' doesn't work.
>>
>> General Question: I assume the answer to the specific question is
>> dependent on my understanding list objects and accessing their
>> attributes.  Can anyone point me to a good, throrough treatment of
>> these R topics?  Specifically how to read and interpret the output of
>> the str(), and attributes() function, how to extract the values of  
>> the
>> 'by' output object into a data frame, etc.?
>>
>> Thanks,
>> Matt
>>
>> ______________________________________________
>> 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.
>
> ______________________________________________
> 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