 <p>Following on @Arun's comment, you can easily create a single data frame with another column indicating the party in question: </p> <pre><code>A = read.table(text="item Alice Bob apples 3 7 pears 1 2 cookies 10 4 grapes 238 483 watermelon 0 1", header=T) B = read.table(text="item Alice Bob grapes 13 26", header=T) C = read.table(text="item Alice Bob beef 1 3 rice 1 2 apples 1 0", header=T) Z = read.table(text="item Alice Bob rice 2 1 grapes 10 15 watermelon 1 0 beef 0 2", header=T) A$party = "A"; B$party = "B"; C$party = "C"; Z$party = "Z" dframe = rbind(A, B, C, Z) </code></pre> <p>From there, you can get functions of the columns without difficulty: </p> <pre><code>apply(dframe[,2:3], 2, sum) </code></pre> <p>If you wanted to deal with individual items, and they had duplicates between the parties, you could perform <a href="http://en.wikipedia.org/wiki/Join_%28SQL%29" rel="nofollow">joins</a> on the original data frames. There's an SO thread on doing this in R <a href="http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right/1300618#1300618">here</a>. </p>