[R] Data frame divison by another data frame with common groups and different length

R. Michael Weylandt michael.weylandt at gmail.com
Tue Sep 18 16:52:39 CEST 2012


On Tue, Sep 18, 2012 at 12:17 PM, Marta Miguel <martamiguel12 at gmail.com> wrote:
> Dear all,
>
>
> I have two different data frames, that have two common variables: date and
> sample. Here is a small extract of both of them
>
>> head(traffic)
>           datet    sessiont samplet buddleiat
> 1   07-08-2012        1       1         1
> 2   07-08-2012        1       1         1
> 3   07-08-2012        1       1         1
> 4   07-08-2012        1       2         3
> 5   07-08-2012        1       2         1
> 6   07-08-2012        1       2         2
> 7   07-08-2012        2       3         4
> 8   07-08-2012        2       3         5
> 9   07-08-2012        2       3         5
> 10  07-08-2012        2       4         8
> 11  07-08-2012        2       4         4
> 12  07-08-2012        2       4         6
> 13  08-08-2012        1       1         9
> 14  08-08-2012        1       1        12
> 15  08-08-2012        1       1         7
> (...)
>
>> head(encounters)
>           datec     samplec  Bladen
> 1    07-08-2012      1          9
> 2    07-08-2012      1          6
> 3    07-08-2012      1          8
> 4    07-08-2012      1          8
> 5    07-08-2012      1          5
> 6    07-08-2012      1          4
> 7    07-08-2012      1          7
> 8    07-08-2012      1          6
> 9    07-08-2012      1          4
> 10   07-08-2012     1          2
> 11   07-08-2012     1          7
> 12   07-08-2012     1          8
> (...)
>
> They don't have the same length.
>
> Using the function tapply, I managed to calculate the mean of the column
> buddleiat (from traffic) by sample and date.
>
> tapply(buddleiat, list(samplet,datet), mean)
>
>
> Now I want to divide each different value of Bladen by the value that has
> the same number of sample and date of the buddleiat mean calculated. Being
> that, different values from Bladen can be divided by the same value of
> buddleiat mean.
>
>
> I tried using this code:
>
>> budt=(Bladen/tapply(buddleiat, list(samplet,datet), mean))
> Error: dims [product 68] do not match the length of object [1360]
>
> But they don't have the same length, and I am not sure that it will do what
> I am asking.
>
>
> Do you have any suggestions? Is there a function I could use or will it be
> easier to do it "manually" by creating a third data frame with both
> variables and repeated values of the buddleiat means?
>
>

I believe changing tapply() --> ave() will be a good start.

Cheers,
Michael

> I hope I made myself understand.
>
>
> Thanks in advance,
>
> Marta Miguel
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> 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