Hi, I have two questions: 1. How do I combine "DF$F =" and "DF$G =" into one function? (The original dataset contains many more columns for which I want to execute the same operation) 2. How do I improve the ave function so that the value DF(12,G) = 0 instead of 1 (see bold font)? Both DF(12,B)=DF(6,B) and DF(12,C)=DF(6,C), so I cannot distinguish between both rows, which is why I want DF(12,G) = 0, leaving DF(9,G) = 2. Please consider the example below: DF = data.frame(read.table(textConnection(" A B C D E 1 1 a 1999 1 0 2 1 b 1999 0 1 3 1 c 1999 0 1 4 1 d 1999 1 0 5 2 c 2001 1 0 6 2 d 2001 0 1 7 3 a 2004 0 1 8 3 b 2004 0 1 9 3 d 2004 0 1 10 4 b 2001 1 0 11 4 c 2001 1 0 12 4 d 2001 0 1"),head=TRUE,stringsAsFactors=FALSE)) DF = DF[order(DF$B,DF$C),] DF$F = ave(DF$D,DF$B, FUN = function(x) cumsum(x)-x) DF$G = ave(DF$E,DF$B, FUN = function(x) cumsum(x)-x) DF A B C D E F G 1 1 a 1999 1 0 0 0 7 3 a 2004 0 1 1 0 2 1 b 1999 0 1 0 0 10 4 b 2001 1 0 0 1 8 3 b 2004 0 1 1 1 3 1 c 1999 0 1 0 0 5 2 c 2001 1 0 0 1 11 4 c 2001 1 0 1 1 4 1 d 1999 1 0 0 0 6 2 d 2001 0 1 1 0 12 4 d 2001 0 1 1 1 9 3 d 2004 0 1 1 2 Thanks for your help! -- View this message in context: http://r.789695.n4.nabble.com/conditional-seq-tp3321327p3321327.html Sent from the R help mailing list archive at Nabble.com.
On Wed, Feb 23, 2011 at 8:32 AM, mathijsdevaan <mathijsdevaan at gmail.com> wrote:> Hi, > > I have two questions: > 1. How do I combine "DF$F =" and "DF$G =" into one function? (The original > dataset contains many more columns for which I want to execute the same > operation)Just define a function that can handle multiple columns. For instance: foo <- function(x) { unlist(lapply(x, FUN = function(z) cumsum(z) - z)) } ## now down to one step ave(DF[, c("D", "E")], DF$B, FUN = foo)> 2. How do I improve the ave function so that the value DF(12,G) = 0 instead > of 1 (see bold font)? Both DF(12,B)=DF(6,B) and DF(12,C)=DF(6,C), so I > cannot distinguish between both rows, which is why I want DF(12,G) = 0, > leaving DF(9,G) = 2.Bold font does not show up on the email listserv, so I do not follow what you mean by "improve" ave(). If both the input rows are equal, shouldn't the output rows also be equal? If not, you need to clearly define the rules in the cases where multiple input rows are equal.> > Please consider the example below:Thanks for providing an easy to use dataset! Best regards, Josh [snip] -- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/