[R] conditional seq

mathijsdevaan mathijsdevaan at gmail.com
Wed Feb 23 17:32:11 CET 2011


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.



More information about the R-help mailing list