Skip to content
Prev 82252 / 398502 Next

merging with aggregating

On Tue, 2005-12-06 at 14:22 +0100, Dubravko Dolic wrote:
There might be a somewhat easier way, but here is one approach:

# Use merge() to join A and B on 'n'
# Set all = TRUE to include non-matched rows
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


# Now get the rowSums() for the V1/V2 column pairs
# and create a new dataframe from the 
# results
V1 = rowSums(C[, c(2, 4)], na.rm = TRUE), 
                   V2 = rowSums(C[, c(3, 5)], na.rm = TRUE))
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


See ?merge and ?rowSums for more information.

HTH,

Marc Schwartz