[R] merging with aggregating
Marc Schwartz (via MN)
mschwartz at mn.rr.com
Tue Dec 6 17:19:17 CET 2005
On Tue, 2005-12-06 at 15:19 +0100, Dubravko Dolic wrote:
> Hi all,
>
> the moment you hit the 'send' button you know the answer...
>
> I approached a solution similar to this one given by Marc. But maybe
> there is a better one? Even because this operation is done in a
> for-loop during which R gets new data from a database. So I sum up 16
> data.frames eventually.
>
> Dubro
<SNIP>
OK....so here is one possible approach to a more generic solution:
# Preallocate a list with 16 elements
DF.List <- replicate(16, list(numeric(0)))
DF.List looks like:
> head(DF.List)
[[1]]
numeric(0)
[[2]]
numeric(0)
[[3]]
numeric(0)
[[4]]
numeric(0)
...
# Do your loop here, placing the actual results
# of your queries into DF.List[[i]]. I am just using
# random samples here for the example.
# NOTE: I am making the assumption in this example
# that each resultant DF will have the same structure.
for (i in 1:16)
{
DF.List[[i]] <- data.frame(n = sample(20, 10),
V1 = sample(20, 10),
V2 = sample(0:10, 10))
}
# Now rbind() the data frames together
DF.All <- do.call("rbind", DF.List)
# Now do use aggregate() to get the sums of V1 and V2
# by 'n'.
DF.Sums <- aggregate(DF.All[, c("V1", "V2")], list(n = DF.All$n), sum)
> DF.Sums
n V1 V2
1 1 161 65
2 2 86 67
3 3 72 28
4 4 59 31
5 5 101 48
6 6 68 41
7 7 75 34
8 8 73 30
9 9 59 26
10 10 80 16
11 11 127 44
12 12 111 78
13 13 111 38
14 14 69 28
15 15 71 26
16 16 90 51
17 17 50 36
18 18 48 41
19 19 92 38
20 20 71 22
Does that get closer to what you need?
HTH,
Marc Schwartz
More information about the R-help
mailing list