[R] merging with aggregating

Pierre Kleiber pkleiber at hawaii.rr.com
Tue Dec 6 20:26:21 CET 2005


Here's a solution that uses aggregate(), as suggested in the subject of this thread.

 > m1 <- cbind(  n=c(1,2,3,4,6,7,8,9,10,13), v1=c(12,10,3,8,7,12,1,18,1,2),
 >              v2=c(0,8,8,4,3,0,0,0,0,0) )
 >
 > m2 <- cbind(  n=c(1,2,3,4,5,6,8,10,11,12), v1=c(0,0,1,12,2,2,2,4,7,0),
 >              v2=c(2,3,9,8,9,9,0,1,1,1) )
 > tt <- as.data.frame(rbind(m1,m2))
 > aggregate(list(v1=tt$v1,v2=tt$v2),by=list(n=tt$n),sum)
     n v1 v2
1   1 12  2
2   2 10 11
3   3  4 17
4   4 20 12
5   5  2  9
6   6  9 12
7   7 12  0
8   8  3  0
9   9 18  0
10 10  5  1
11 11  7  1
12 12  0  1
13 13  2  0

Cheers, Pierre


Adaikalavan Ramasamy offered the following remark on 12/06/05 04:40...
> m1 <- cbind(  n=c(1,2,3,4,6,7,8,9,10,13), v1=c(12,10,3,8,7,12,1,18,1,2),
>              v2=c(0,8,8,4,3,0,0,0,0,0) )
> 
> m2 <- cbind(  n=c(1,2,3,4,5,6,8,10,11,12), v1=c(0,0,1,12,2,2,2,4,7,0),
>              v2=c(2,3,9,8,9,9,0,1,1,1) )
> 
> m.all <- merge(m1, m2, by="n", all=T)
> 
> 	    n v1.x v2.x v1.y v2.y
> 	1   1   12    0    0    2
> 	2   2   10    8    0    3
> 	3   3    3    8    1    9
> 	4   4    8    4   12    8
> 	5   5   NA   NA    2    9
> 	6   6    7    3    2    9
> 	7   7   12    0   NA   NA
> 	8   8    1    0    2    0
> 	9   9   18    0   NA   NA
> 	10 10    1    0    4    1
> 	11 11   NA   NA    7    1
> 	12 12   NA   NA    0    1
> 	13 13    2    0   NA   NA
> 
> Then depending on how many such columns there are, you have a number of
> ways of aggregating this dataset. One such way is
> 
> cbind( n=m.all[ , "n"], 
>       v1=rowSums( m.all[ , grep( "^v1", colnames(m.all) )  ], na.rm=T ),
>       v2=rowSums( m.all[ , grep( "^v2", colnames(m.all) )], na.rm=T ) )
> 
> 	    n v1 v2
> 	1   1 12  2
> 	2   2 10 11
> 	3   3  4 17
> 	4   4 20 12
> 	5   5  2  9
> 	6   6  9 12
> 	7   7 12  0
> 	8   8  3  0
> 	9   9 18  0
> 	10 10  5  1
> 	11 11  7  1
> 	12 12  0  1
> 	13 13  2  0
> 
> Regards, Adai
> 
> 
> On Tue, 2005-12-06 at 14:22 +0100, Dubravko Dolic wrote:
> 
>>Dear List,
>>
>>I have two data.frame of the following form:
>>
>>A:
>>
>>n  V1 V2
>>1  12  0 
>>2  10  8
>>3   3  8 
>>4   8  4
>>6   7  3  
>>7  12  0 
>>8   1  0 
>>9  18  0 
>>10  1  0
>>13  2  0
>>
>>B:
>>
>>n  V1 V2
>>1   0  2
>>2   0  3
>>3   1  9
>>4  12  8 
>>5   2  9
>>6   2  9
>>8   2  0
>>10  4  1
>>11  7  1
>>12  0  1
>>
>>
>>Now I want to merge those frame to one data.frame with summing up the
>>columns V1 and V2 but not the column n. So the result in this example
>>would be:
>>
>>AB:
>>
>>n  V1 V2
>>1  12  2
>>2  10 11 
>>3   4 17
>>4  20 12
>>5   2  9
>>6   9 12
>>7  12  0
>>8   3  0
>>9  18  0
>>10  5  1
>>11  7  1
>>12  0  1
>>13  2  0 
>>
>>
>>So Columns V1 and V2 are the sum of A und B while n has its old value.
>>Notice that there are different rows in n of A and B.
>>
>>I don't have a clue how to start here. Any hint is welcome.
>>
>>Thanks
>>
>>Dubravko Dolic
>>Munich
>>Germany
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>>
> 
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> 

-- 
-----------------------------------------------------------------
Pierre Kleiber, Ph.D       Email: pkleiber at honlab.nmfs.hawaii.edu
Fishery Biologist            Tel: 808 983-5399 / (hm)808 737-7544
NOAA Fisheries Service - Honolulu Laboratory    Fax: 808 983-2902
2570 Dole St., Honolulu, HI 96822-2396
-----------------------------------------------------------------
  "God could have told Moses about galaxies and mitochondria and
   all.  But behold... It was good enough for government work."




More information about the R-help mailing list