[R] Not sure how to use aggregate, colSums, by
Dennis Murphy
djmuser at gmail.com
Mon Aug 15 01:38:15 CEST 2011
Hi:
Here's another approach using the reshape2 package. I called your data
frame dat in the code below.
library('reshape2')
mdat <- melt(dat, measure = c('y', 'f'))
acast(mdat, e1 ~ variable ~ e2, fun = sum, margins = 'e1')
, , con
y f
can 21 108
france 21 114
italy 21 126
usa 0 0
(all) 63 348
, , std
y f
can 21 120
france 0 0
italy 0 0
usa 42 198
(all) 63 318
This returns an array rather than a list.
HTH,
Dennis
On Sun, Aug 14, 2011 at 10:20 AM, eric <ericstrom at aol.com> wrote:
> I have a data frame called test shown below that i would like to summarize in
> a particular way :
>
> I want to show the column sums (columns y ,f) grouped by country (column
> e1). However, I'm looking for the data to be split according to column e2.
> In other words, two tables of sum by country. One table for "con" and one
> table for "std" shown in column e2. Finally at the bottom of the two tables,
> I would like the overall sum /Totals for all the countries for the two
> columns (y,f). The lay outs for the two tables I'm looking for are also
> shown below in case my description isn't completely clear
>
> I would also like to be able to use the Totals of y and f for the two tables
> in other calculations.
>
> I can get the two sets of totals with the following commands but not the
> sums by country.
>
> colSums(test[test$e2=="std", c(3,4)])
> colSums(test[test$e2=="con", c(3,4)])
>
> I know there's an easy way to do this with a combination of colSums, by,
> aggregate but I can't seem to get it.
>
> std y f
>
> usa sum sum
> france sum sum
> can sum sum
> italy sum sum
> Totals sum sum
>
> con y f
>
> usa sum sum
> france sum sum
> can sum sum
> italy sum sum
> Totals sum sum
>
> e1 e2 y f
> 1 usa std 1 1
> 2 usa std 1 2
> 3 can con 1 3
> 4 france con 1 4
> 5 can std 1 5
> 6 italy con 1 6
> 7 usa std 2 7
> 8 usa std 2 8
> 9 can con 2 9
> 10 france con 2 10
> 11 can std 2 11
> 12 italy con 2 12
> 13 usa std 3 13
> 14 usa std 3 14
> 15 can con 3 15
> 16 france con 3 16
> 17 can std 3 17
> 18 italy con 3 18
> 19 usa std 4 19
> 20 usa std 4 20
> 21 can con 4 21
> 22 france con 4 22
> 23 can std 4 23
> 24 italy con 4 24
> 25 usa std 5 25
> 26 usa std 5 26
> 27 can con 5 27
> 28 france con 5 28
> 29 can std 5 29
> 30 italy con 5 30
> 31 usa std 6 31
> 32 usa std 6 32
> 33 can con 6 33
> 34 france con 6 34
> 35 can std 6 35
> 36 italy con 6 36
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Not-sure-how-to-use-aggregate-colSums-by-tp3743258p3743258.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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