[R] understanding output of tapply/by cumsum
jim holtman
jholtman at gmail.com
Tue Dec 7 13:43:57 CET 2010
Maybe 'ave' is what you were looking for:
> d$cum <- ave(d$n, d$a, d$c, FUN = cumsum)
> d
a b c n cum
1 1 1 1 11.1 11.1
2 2 1 1 21.1 21.1
3 3 1 1 31.1 31.1
4 4 1 1 41.1 41.1
5 5 1 1 51.1 51.1
6 1 2 1 12.1 23.2
7 2 2 1 22.1 43.2
8 3 2 1 32.1 63.2
9 4 2 1 42.1 83.2
10 5 2 1 52.1 103.2
11 1 3 1 13.1 36.3
12 2 3 1 23.1 66.3
13 3 3 1 33.1 96.3
14 4 3 1 43.1 126.3
15 5 3 1 53.1 156.3
16 1 1 2 11.2 11.2
17 2 1 2 21.2 21.2
18 3 1 2 31.2 31.2
19 4 1 2 41.2 41.2
20 5 1 2 51.2 51.2
21 1 2 2 12.2 23.4
22 2 2 2 22.2 43.4
23 3 2 2 32.2 63.4
24 4 2 2 42.2 83.4
25 5 2 2 52.2 103.4
26 1 3 2 13.2 36.6
27 2 3 2 23.2 66.6
28 3 3 2 33.2 96.6
29 4 3 2 43.2 126.6
30 5 3 2 53.2 156.6
>
On Tue, Dec 7, 2010 at 6:39 AM, Gerrit Draisma <gdraisma at xs4all.nl> wrote:
> Dear R-users,
>
> I have a dataset with categories and numbers.
> I would like to compute and add cumulative numbers
> to the dataset.
> I do not understand the structure of by(...) or
> tapply(...) output enough to handle it.
>
> Here a small example
> --------------
> d<-expand.grid(a=1:5,b=1:3,c=1:2)
> d$n = 10 * d$a + d$b +0.1* d$c
> Sn<-by(d$n,list(d$a,d$c),cumsum)
> str(Sn)
> ---------
> List of 10
> $ : num [1:3] 11.1 23.2 36.3
> $ : num [1:3] 21.1 43.2 66.3
> $ : num [1:3] 31.1 63.2 96.3
> $ : num [1:3] 41.1 83.2 126.3
> $ : num [1:3] 51.1 103.2 156.3
> $ : num [1:3] 11.2 23.4 36.6
> $ : num [1:3] 21.2 43.4 66.6
> $ : num [1:3] 31.2 63.4 96.6
> $ : num [1:3] 41.2 83.4 126.6
> $ : num [1:3] 51.2 103.4 156.6
> - attr(*, "dim")= int [1:2] 5 2
> - attr(*, "dimnames")=List of 2
> ..$ : chr [1:5] "1" "2" "3" "4" ...
> ..$ : chr [1:2] "1" "2"
> - attr(*, "call")= language by.default(data = d$n, INDICES = list(d$a,
> d$c), FUN = cumsum)
> - attr(*, "class")= chr "by
> ---------
> # these give (a) lists of one numerical vector(a)
> Sn[5,2]
> Sn[cbind(d$a,d$c)]
> # how to access the individual cumsum values?
> # and assign them to d$Sn?
> --------------
>
> Thanks,
> Gerrit.
>
> ---
> Gerrit Draisma
> Department of Public Health
> Erasmus MC, University Medical Center Rotterdam
> Room AE-235
> P.O. Box 2040 3000 CA Rotterdam The Netherlands
> Phone: +31 10 7043787 Fax: +31 10 7038474
> http://mgzlx4.erasmusmc.nl/pwp/?gdraisma
>
> ______________________________________________
> 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.
>
--
Jim Holtman
Data Munger Guru
What is the problem that you are trying to solve?
More information about the R-help
mailing list