WIll this do it for you: > x <- read.table(textConnection("ColA ColB + 1 0 + 3 0 + 2 1 + 2 0 + 1 0 + 4 0 + 1 1 + 9 1 + 3 0 + 5 0 + 2 1"), header=TRUE) > closeAllConnections() > x.s <- split(x, cumsum(x$ColB)) > x.l <- do.call(rbind, lapply(x.s, function(.grp){ + newdata <- cbind(.grp, sum=cumsum((.grp$ColB == 0) * .grp$ColA)) + newdata$sum[newdata$ColB == 1] <- .001 + newdata + })) > > x.l ColA ColB sum 0.1 1 0 1.000 0.2 3 0 4.000 1.3 2 1 0.001 1.4 2 0 2.000 1.5 1 0 3.000 1.6 4 0 7.000 2 1 1 0.001 3.8 9 1 0.001 3.9 3 0 3.000 3.10 5 0 8.000 4 2 1 0.001 >
On Tue, Feb 9, 2010 at 9:06 PM, Kara Przeczek <przec...@unbc.ca> wrote: > Dear R Help: > > I am trying to sum data from one column in a dataframe based on a value in > another. I do not know how to do this easily in R. > For example: > > Col A Col B > 1 0 > 3 0 > 2 1 > 2 0 > 1 0 > 4 0 > 1 1 > 9 1 > 3 0 > 5 0 > 2 1 > > I would like to cumsum the values in Col A for all rows where Col B is 0, and > a value of 1 in Col B will reset the sum and give a value of 0.001. Thus, for > this table I would like an output of 1, 4, 0.001, 2, 3, 7, 0.001, 0.001, 3, > 8, 0.001. > I tried using a For loop, but that summed all the Col A values together. I > need something that does > For (i in 1:length(df$Col B)) > { > IF{Col B == 0, cumsum(Col A) "until" Col B == 1, else 0.001} > } > I don't know how to use "until" in R. > Any help would be greatly appreciated! > Kara > > ______________________________________________ > 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? ______________________________________________ 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.