[R] Create a new dataframe from an existing dataframe

Gang Chen gangchen at mail.nih.gov
Tue Jan 8 16:32:17 CET 2008


Yes, this works well. Also 'table' suggested by Bert Gunter also  
works perfectly.

Thank all who've helped me on this.

Gang


On Jan 7, 2008, at 7:39 PM, jim holtman wrote:

> Does this do what you want?
>
>> x <- read.table(textConnection("A    B   C   D
> + A1  B1 C1 D1
> + A1  B2 C1 D1
> + A1  B1 C1 D1
> + A1  B2 C2 D2
> + A2  B1 C1 D1
> + A1  B2 C2 D2
> + A1  B1 C2 D2
> + A2  B2 C1 D1
> + A1  B1 C2 D2
> + A2  B2  C1 D1"), header=TRUE)
>> counts <- ave(seq(nrow(x)), x$B, x$C, x$D, FUN=length)  # get counts
>> x.new <- x[, -1]  # delete "A"
>> x.new$FreqD <- counts  # add new column
>> # print out unique entries
>> unique(x.new)
>    B  C  D FreqD
> 1 B1 C1 D1     3
> 2 B2 C1 D1     3
> 4 B2 C2 D2     2
> 7 B1 C2 D2     2
>>
>
>
> On Jan 7, 2008 2:38 PM, Gang Chen <gangchen at mail.nih.gov> wrote:
>> Yes, I misstated it when I said that I would keep B and C. I want to
>> collapse column A, but count the frequency of D as a new column in
>> the new dataframe DF2 while collapsing A. The rows of columns B, C,
>> and D of course would be reduced because of A collapsing.
>>
>> For example, if dataframe DF is
>>
>> A    B   C   D
>> A1  B1 C1 D1
>> A1  B2 C1 D1
>> A1  B1 C1 D1
>> A1  B2 C2 D2
>> A2  B1 C1 D1
>> A1  B2 C2 D2
>> A1  B1 C2 D2
>> A2  B2 C1 D1
>> A1  B1 C2 D2
>> A2  B2  C1 D1
>> ......
>>
>> I would like to have a new dataframe DF2
>>
>> B   C   D     FreqA
>> B1 C1 D1     6
>> B1 C1 D2     31
>> B1 C2 D1     8
>> B1 C2 D2    14
>> B2 C1 D1    12
>> B2 C1 D2    43
>> B2 C2 D1    23
>> B2 C2 D2    43
>>
>> Thanks,
>> Gang
>>
>>
>>
>>
>> On Jan 7, 2008, at 2:06 PM, Duncan Murdoch wrote:
>>
>>> On 1/7/2008 1:28 PM, Gang Chen wrote:
>>>> I have a dataframe DF with 4 columns (variables) A, B, C, and D,
>>>> and  want to create a new dataframe DF2 by keeping B and C in DF
>>>> but  counting the frequency of D while collapsing A. I tried
>>>> by(DF$D, list(DF$B, DF$C), FUN=summary)
>>>> but this is not exactly what I want. What is a good way to do it?
>>>
>>> I think you can't do that.  If you want to keep B and C, then you
>>> can't reduce the number of rows, but "collapsing A" sounds like you
>>> want fewer rows.
>>>
>>> Perhaps if you posted a simple before and after example?
>>>
>>> Duncan Murdoch
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> -- 
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem you are trying to solve?




More information about the R-help mailing list