On 03/10/2014 05:57 AM, Philip A. Viton wrote:

Suppose I have a dataframe beginning:

id yr val
a 1950 1
b 1950 10
a 1951 2

I'm trying to produce a table of cumulative sums
of val, disaggregated by id and then yr, so the result
should begin

id yr cumval
a 1950 1
a 1951 3
b 1950 10

I've been trying to do this using "aggregate"
and passing the function "cumsum," but I can't get
it to work. Can someone tell me how to do this?

Hi Philip,
Kinda messy, but try this:

df<-read.table(text="id yr val
a 1950 1
b 1950 10
a 1951 2
b 1952 3
c 1952 4
a 1954 5
b 1954 2
c 1954 3",header=TRUE)
dfc<-by(df[,2:3],df$id,cumsum)
ids<-names(dfc)
dfcc<-cbind(rep(ids[1],dim(dfc[[1]])[1]),dfc[[1]])
names(dfcc)<-names(df)
for(n in 2:length(dfc)) {
 dfpc<-cbind(rep(ids[n],dim(dfc[[n]])[1]),dfc[[n]])
 names(dfpc)<-names(df)
 dfcc<-rbind(dfcc,dfpc)
}

Jim

______________________________________________
R-help@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.

Reply via email to