[R] cumulative sum by group and under some criteria
arun
smartpink111 at yahoo.com
Tue Feb 19 23:09:54 CET 2013
Hi,
""suppose that I have a dataset 'd'
m1 n1 A B C D
1 2 2 0.902500 0.640 0.9025 0.64
2 3 2 0.857375 0.512 0.9025 0.64
I want to add x1 (from 0 to m1), y1(from 0 to n1), m (range from
m1+2 to 7-n1), n(from n1+2 to 9-m), x (x1 to x1+m-m1), y(y1 to y1+n-n1), expanding to another dataset 'd2' based on each row (combination of m1
and n1)""
Try:
d<-read.table(text="
m1 n1 A B C D
1 2 2 0.902500 0.640 0.9025 0.64
2 3 2 0.857375 0.512 0.9025 0.64
",sep="",header=TRUE)
vec1<- paste(d[,1],d[,2],d[,3],d[,4],d[,5],d[,6])
res1<- do.call(rbind,lapply(vec1,function(m1) do.call(rbind,lapply(0:(as.numeric(substr(m1,1,1))),function(x1) do.call(rbind,lapply(0:(as.numeric(substr(m1,3,3))),function(y1) do.call(rbind,lapply((as.numeric(substr(m1,1,1))+2):(7-as.numeric(substr(m1,3,3))),function(m) do.call(rbind,lapply((as.numeric(substr(m1,3,3))+2):(9-m),function(n)
do.call(rbind,lapply(x1:(x1+m-as.numeric(substr(m1,1,1))), function(x)
do.call(rbind,lapply(y1:(y1+n-as.numeric(substr(m1,3,3))), function(y)
expand.grid(m1,x1,y1,m,n,x,y)) )))))))))))))
names(res1)<- c("group","x1","y1","m","n","x","y")
res1$m1<- NA; res1$n1<- NA; res1$A<- NA; res1$B<- NA; res1$C<- NA;res1$D <- NA
res1[,8:13]<-do.call(rbind,lapply(strsplit(as.character(res1$group)," "),as.numeric))
res2<- res1[,c(8:9,2:7,10:13)]
head(res2)
# m1 n1 x1 y1 m n x y A B C D
#1 2 2 0 0 4 4 0 0 0.9025 0.64 0.9025 0.64
#2 2 2 0 0 4 4 0 1 0.9025 0.64 0.9025 0.64
#3 2 2 0 0 4 4 0 2 0.9025 0.64 0.9025 0.64
#4 2 2 0 0 4 4 1 0 0.9025 0.64 0.9025 0.64
#5 2 2 0 0 4 4 1 1 0.9025 0.64 0.9025 0.64
#6 2 2 0 0 4 4 1 2 0.9025 0.64 0.9025 0.64
________________________________
From: Joanna Zhang <zjoanna2013 at gmail.com>
To: arun <smartpink111 at yahoo.com>
Sent: Tuesday, February 19, 2013 11:43 AM
Subject: Re: [R] cumulative sum by group and under some criteria
Thanks. I can get the data I expected (get rid of the m1=3, n1=3) using the join and 'inner' code, but just curious about the way to expand the data. There should be a way to expand the data based on each row (combination of the variables), unique(d3$m1 & d3$n1) ?.
or is there a way to use 'data.frame' and 'for' loop to expand directly from the data? like res1<-data.frame (d3) for () {....
On Tue, Feb 19, 2013 at 9:55 AM, arun <smartpink111 at yahoo.com> wrote:
If you can provide me the output that you expect with all the rows of the combination in the res2, I can take a look.
>
>
>
>
>
>
>________________________________
>
>From: Joanna Zhang <zjoanna2013 at gmail.com>
>To: arun <smartpink111 at yahoo.com>
>
>Sent: Tuesday, February 19, 2013 10:42 AM
>
>Subject: Re: [R] cumulative sum by group and under some criteria
>
>
>Thanks. But I thougth the expanded dataset 'res1' should not have combination of m1=3 and n1=3 because it is based on dataset 'd3' which doesn't have m1=3 and n1=3, right?>
>>In the example that you provided:
>> (m1+2):(maxN-(n1+2))
>>#[1] 5
>> (n1+2):(maxN-5)
>>#[1] 4
>>#Suppose
>> x1<- 4
>> y1<- 2
>> x1:(x1+5-m1)
>>#[1] 4 5 6
>> y1:(y1+4-n1)
>>#[1] 2 3 4
>>
>> datnew<-expand.grid(5,4,4:6,2:4)
>> colnames(datnew)<- c("m","n","x","y")
>>datnew<-within(datnew,{p1<- x/m;p2<-y/n})
>>res<-cbind(datnew,d2[rep(1:nrow(d2),nrow(datnew)),])
>> row.names(res)<- 1:nrow(res)
>> res
>># m n x y p2 p1 m1 n1 cterm1_P1L cterm1_P0H
>>#1 5 4 4 2 0.50 0.8 3 2 0.00032 0.0025
>>#2 5 4 5 2 0.50 1.0 3 2 0.00032 0.0025
>>#3 5 4 6 2 0.50 1.2 3 2 0.00032 0.0025
>>#4 5 4 4 3 0.75 0.8 3 2 0.00032 0.0025
>>#5 5 4 5 3 0.75 1.0 3 2 0.00032 0.0025
>>#6 5 4 6 3 0.75 1.2 3 2 0.00032 0.0025
>>#7 5 4 4 4 1.00 0.8 3 2 0.00032 0.0025
>>#8 5 4 5 4 1.00 1.0 3 2 0.00032 0.0025
>>#9 5 4 6 4 1.00 1.2 3 2 0.00032 0.0025
>>
>>A.K.
>>
>>
>>
>>
>>
>>----- Original Message -----
>>From: Zjoanna <Zjoanna2013 at gmail.com>
>>To: r-help at r-project.org
>>Cc:
>>
>>Sent: Sunday, February 10, 2013 6:04 PM
>>Subject: Re: [R] cumulative sum by group and under some criteria
>>
>>
>>Hi,
>>How to expand or loop for one variable n based on another variable? for
>>example, I want to add m (from m1 to maxN- n1-2) and for each m, I want to
>>add n (n1+2 to maxN-m), and similarly add x and y, then I need to do some
>>calculations.
>>
>>d3<-data.frame(d2)
>> for (m in (m1+2):(maxN-(n1+2)){
>> for (n in (n1+2):(maxN-m)){
>> for (x in x1:(x1+m-m1)){
>> for (y in y1:(y1+n-n1)){
>> p1<- x/m
>> p2<- y/n
>>}}}}
>>
>>On Thu, Feb 7, 2013 at 12:16 AM, arun kirshna [via R] <
>>ml-node+s789695n4657773h74 at n4.nabble.com> wrote:
>>
>>> Hi,
>>>
>>> Anyway, just using some random combinations:
>>> dnew<- expand.grid(4:10,5:10,6:10,3:7,4:5,6:8)
>>> names(dnew)<-c("m","n","x1","y1","x","y")
>>> resF<- cbind(dnew,d2[rep(1:nrow(d2),nrow(dnew)),])
>>>
>>> row.names(resF)<- 1:nrow(resF)
>>> head(resF)
>>> # m n x1 y1 x y m1 n1 cterm1_P1L cterm1_P0H
>>> #1 4 5 6 3 4 6 3 2 0.00032 0.0025
>>> #2 5 5 6 3 4 6 3 2 0.00032 0.0025
>>> #3 6 5 6 3 4 6 3 2 0.00032 0.0025
>>> #4 7 5 6 3 4 6 3 2 0.00032 0.0025
>>> #5 8 5 6 3 4 6 3 2 0.00032 0.0025
>>> #6 9 5 6 3 4 6 3 2 0.00032 0.0025
>>>
>>> nrow(resF)
>>> #[1] 6300
>>> I am not sure what you want to do with this.
>>> A.K.
>>> ________________________________
>>> From: Joanna Zhang <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=0>>
>>>
>>> To: arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=1>>
>>
>>>
>>> Sent: Wednesday, February 6, 2013 10:29 AM
>>> Subject: Re: cumulative sum by group and under some criteria
>>>
>>>
>>> Hi,
>>>
>>> Thanks! I need to do some calculations in the expended data, the expended
>>> data would be very large, what is an efficient way, doing calculations
>>> while expending the data, something similiar with the following, or
>>> expending data using the code in your message and then add calculations in
>>> the expended data?
>>>
>>> d3<-data.frame(d2)
>>> for .......{
>>> for {
>>> for .... {
>>> for .....{
>>> p1<- x/m
>>> p2<- y/n
>>> ..........
>>> }}
>>> }}
>>>
>>> I also modified your code for expending data:
>>> dnew<-expand.grid((m1+2):(maxN-(n1+2)),(n1+2):(maxN-m),0:m1,0:n1,
>>> x1:(x1+m-m1),y1:(y1+n-n1))
>>> names(dnew)<-c("m","n","x1","y1","x","y")
>>> dnew
>>> resF<-cbind(dnew[,c(2,1)],d2[rep(1:nrow(d2),nrow(dnew)),]) # this is
>>> not correct, how to modify it.
>>> resF
>>> row.names(resF)<-1:nrow(resF)
>>> resF
>>>
>>>
>>>
>>>
>>> On Tue, Feb 5, 2013 at 2:46 PM, arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=2>>
>>
>>> wrote:
>>>
>>> Hi,
>>>
>>> >
>>> >You can reduce the steps to reach d2:
>>> >res3<-
>>> with(res2,aggregate(cbind(cterm1_P1L,cterm1_P0H),by=list(m1,n1),max))
>>> >
>>> >#Change it to:
>>> >res3new<- aggregate(.~m1+n1,data=res2[,c(1:2,12:13)],max)
>>> >res3new
>>> > m1 n1 cterm1_P1L cterm1_P0H
>>> >1 2 2 0.01440 0.00273750
>>> >2 3 2 0.00032 0.00250000
>>> >3 2 3 0.01952 0.00048125
>>> >d2<-res3new[res3new[,3]<0.01 & res3new[,4]<0.01,]
>>> >
>>> > dnew<-expand.grid(4:10,5:10)
>>> > names(dnew)<-c("n","m")
>>> >resF<-cbind(dnew[,c(2,1)],d2[rep(1:nrow(d2),nrow(dnew)),])
>>> >
>>> >row.names(resF)<-1:nrow(resF)
>>> > head(resF)
>>> ># m n m1 n1 cterm1_P1L cterm1_P0H
>>> >#1 5 4 3 2 0.00032 0.0025
>>> >#2 5 5 3 2 0.00032 0.0025
>>> >#3 5 6 3 2 0.00032 0.0025
>>> >#4 5 7 3 2 0.00032 0.0025
>>> >#5 5 8 3 2 0.00032 0.0025
>>> >#6 5 9 3 2 0.00032 0.0025
>>> >
>>> >A.K.
>>> >
>>> >________________________________
>>> >From: Joanna Zhang <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=3>>
>>>
>>> >To: arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=4>>
>>
>>>
>>> >Sent: Tuesday, February 5, 2013 2:48 PM
>>> >
>>> >Subject: Re: cumulative sum by group and under some criteria
>>> >
>>> >
>>> > Hi ,
>>> >what I want is :
>>> >m n m1 n1 cterm1_P1L cterm1_P0H
>>> > 5 4 3 2 0.00032 0.00250000
>>> > 5 5 3 2 0.00032 0.00250000
>>> > 5 6 3 2 0.00032 0.00250000
>>> > 5 7 3 2 0.00032 0.00250000
>>> > 5 8 3 2 0.00032 0.00250000
>>> > 5 9 3 2 0.00032 0.00250000
>>> >5 10 3 2 0.00032 0.00250000
>>> >6 4 3 2 0.00032 0.00250000
>>> >6 5 3 2 0.00032 0.00250000
>>> >6 6 3 2 0.00032 0.00250000
>>> >6 7 3 2 0.00032 0.00250000
>>> >.....
>>> >6 10 3 2 0.00032 0.00250000
>>> >
>>> >
>>> >
>>> >On Tue, Feb 5, 2013 at 1:12 PM, arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=5>>
>>
>>> wrote:
>>> >
>>> >Hi,
>>> >>
>>> >>Saw your message on Nabble.
>>> >>
>>> >>
>>> >>"I want to add some more columns based on the results. Is the following
>>> code good way to create such a data frame and How to see the column m and n
>>> in the updated data?
>>> >>
>>> >>d2<- reres3[res3[,3]<0.01 & res3[,4]<0.01,]
>>> >># should be a typo
>>> >>
>>> >>colnames(d2)[1:2]<- c("m1","n1");
>>> >>d2 #already a data.frame
>>> >>
>>> >>d3<-data.frame(d2)
>>> >> for (m in (m1+2):10){
>>> >> for (n in (n1+2):10){
>>> >> d3<-rbind(d3, c(d2))}}" #this is not making much sense to me.
>>> Especially, you mentioned you wanted add more columns.
>>> >>#Running this step gave error
>>> >>#Error: object 'm1' not found
>>> >>
>>> >>Not sure what you want as output.
>>> >>Could you show the ouput that is expected:
>>> >>
>>> >>A.K.
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>________________________________
>>> >>From: Joanna Zhang <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=6>>
>>>
>>> >>To: arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=7>>
>>
>>>
>>> >>Sent: Tuesday, February 5, 2013 10:23 AM
>>> >>
>>> >>Subject: Re: cumulative sum by group and under some criteria
>>> >>
>>> >>
>>> >>Hi,
>>> >>
>>> >>Yes, I changed code. You answered the questions. But how can I put two
>>> criteria in the code, if both the maximum value of cterm1_p1L <= 0.01 and
>>> cterm1_p1H <=0.01, the output the m1,n1.
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>On Tue, Feb 5, 2013 at 8:47 AM, arun <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=8>>
>>
>>> wrote:
>>> >>
>>> >>
>>> >>>
>>> >>> HI,
>>> >>>
>>> >>>
>>> >>>I am not getting the same results as yours: You must have changed the
>>> dataset.
>>> >>> res2[,1:2][res2$cterm1_P1L<0.6 & res2$cterm1_P0H<0.95,]
>>> >>> m1 n1
>>> >>>1 2 2
>>> >>>2 2 2
>>> >>>3 2 2
>>> >>>4 2 2
>>> >>>5 2 2
>>> >>>6 2 2
>>> >>>7 2 2
>>> >>>8 2 2
>>> >>>9 2 2
>>> >>>10 3 2
>>> >>>11 3 2
>>> >>>12 3 2
>>> >>>13 3 2
>>> >>>14 3 2
>>> >>>15 3 2
>>> >>>16 3 2
>>> >>>17 3 2
>>> >>>18 3 2
>>> >>>19 3 2
>>> >>>20 3 2
>>> >>>21 3 2
>>> >>>22 2 3
>>> >>>23 2 3
>>> >>>24 2 3
>>> >>>25 2 3
>>> >>>26 2 3
>>> >>>27 2 3
>>> >>>28 2 3
>>> >>>29 2 3
>>> >>>30 2 3
>>> >>>31 2 3
>>> >>>32 2 3
>>> >>>33 2 3
>>> >>>
>>> >>>
>>> >>>Regarding the maximum value within each block, haven't I answered in
>>> the earlier post.
>>> >>>
>>> >>>aggregate(cterm1_P1L~m1+n1,data=res2,max)
>>> >>># m1 n1 cterm1_P1L
>>> >>>#1 2 2 0.01440
>>> >>>#2 3 2 0.00032
>>> >>>#3 2 3 0.01952
>>> >>>
>>> >>>
>>> >>> with(res2,aggregate(cbind(cterm1_P1L,cterm1_P0H),by=list(m1,n1),max))
>>> >>># Group.1 Group.2 cterm1_P1L cterm1_P0H
>>> >>>#1 2 2 0.01440 0.00273750
>>> >>>#2 3 2 0.00032 0.00250000
>>> >>>#3 2 3 0.01952 0.00048125
>>> >>>
>>> >>>
>>> >>>A.K.
>>> >>>
>>> >>>
>>> >>>----- Original Message -----
>>
>>> >>>From: "[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=9>";;;
>>> <[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=10>>
>>> >>>To: [hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=11>
>>> >>>Cc:
>>> >>>
>>> >>>Sent: Tuesday, February 5, 2013 9:33 AM
>>> >>>Subject: Re: cumulative sum by group and under some criteria
>>> >>>
>>> >>>Hi,
>>> >>>If use this
>>> >>>
>>> >>>res2[,1:2][res2$cterm1_P1L<0.6 & res2$cterm1_P0H<0.95,]
>>> >>>
>>> >>>the results are the following, but actually only m1=3, n1=2 sastify the
>>> criteria, as I need to look at the row with maximum value within each
>>> block,not every row.
>>> >>>
>>> >>>
>>> >>> m1 n1
>>> >>>1 2 2
>>> >>>10 3 2
>>> >>>11 3 2
>>> >>>12 3 2
>>> >>>13 3 2
>>> >>>14 3 2
>>> >>>15 3 2
>>> >>>16 3 2
>>> >>>17 3 2
>>> >>>18 3 2
>>> >>>19 3 2
>>> >>>20 3 2
>>> >>>21 3 2
>>> >>>22 2 3
>>> >>>23 2 3
>>> >>>
>>> >>>
>>> >>><quote author='arun kirshna'>
>>> >>>
>>> >>>
>>> >>>
>>> >>>Hi,
>>> >>>Thanks. This extract every row that satisfy the condition, but I need
>>> look
>>> >>>at the last row (the maximum of cumulative sum) for each block (m1,n1).
>>> for
>>> >>>example, if I set the criteria
>>> >>>
>>> >>>res2$cterm1_P1L<0.6 & res2$cterm1_P0H<0.95, this should extract m1= 3,
>>> n1 =
>>> >>>2.
>>> >>>
>>> >>>
>>> >>>Hi,
>>> >>>I am not sure I understand your question.
>>> >>>res2$cterm1_P1L<0.6 & res2$cterm1_P0H<0.95
>>> >>> #[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
>>> TRUE
>>> >>>TRUE
>>> >>>#[16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
>>> TRUE
>>> >>>TRUE
>>> >>>#[31] TRUE TRUE TRUE
>>> >>>
>>> >>>This will extract all the rows.
>>> >>>
>>> >>>
>>> >>>res2[,1:2][res2$cterm1_P1L<0.01 & res2$cterm1_P1L!=0,]
>>> >>># m1 n1
>>> >>>#21 3 2
>>> >>>This extract only the row you wanted.
>>> >>>
>>> >>>For the different groups:
>>> >>>
>>> >>>aggregate(cterm1_P1L~m1+n1,data=res2,max)
>>> >>># m1 n1 cterm1_P1L
>>> >>>#1 2 2 0.01440
>>> >>>#2 3 2 0.00032
>>> >>>#3 2 3 0.01952
>>> >>>
>>> >>> aggregate(cterm1_P1L~m1+n1,data=res2,function(x) max(x)<0.01)
>>> >>> # m1 n1 cterm1_P1L
>>> >>>#1 2 2 FALSE
>>> >>>#2 3 2 TRUE
>>> >>>#3 2 3 FALSE
>>> >>>
>>> >>>res4<-aggregate(cterm1_P1L~m1+n1,data=res2,function(x) max(x)<0.01)
>>> >>>res4[,1:2][res4[,3],]
>>> >>># m1 n1
>>> >>>#2 3 2
>>> >>>
>>> >>>A.K.
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>----- Original Message -----
>>
>>> >>>From: "[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=12>";;;
>>> <[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=13>>
>>> >>>To: [hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=14>
>>> >>>Cc:
>>> >>>Sent: Sunday, February 3, 2013 3:58 PM
>>> >>>Subject: Re: cumulative sum by group and under some criteria
>>> >>>
>>> >>>Hi,
>>> >>>Let me restate my questions. I need to get the m1 and n1 that satisfy
>>> some
>>> >>>criteria, for example in this case, within each group, the maximum
>>> >>>cterm1_p1L ( the last row in this group) <0.01. I need to extract m1=3,
>>> >>>n1=2, I only need m1, n1 in the row.
>>> >>>
>>> >>>Also, how to create the structure from the data.frame, I am new to R, I
>>> need
>>> >>>to change the maxN and run the loop to different data.
>>> >>>Thanks very much for your help!
>>> >>>
>>> >>><quote author='arun kirshna'>
>>> >>>HI,
>>> >>>
>>> >>>I think this should be more correct:
>>> >>>maxN<-9
>>> >>>c11<-0.2
>>> >>>c12<-0.2
>>> >>>p0L<-0.05
>>> >>>p0H<-0.05
>>> >>>p1L<-0.20
>>> >>>p1H<-0.20
>>> >>>
>>> >>>d <- structure(list(m1 = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
>>> >>>2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
>>> >>> n1 = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
>>> >>> 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), x1 = c(0,
>>> >>> 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2,
>>> >>> 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3), y1 = c(0, 1, 2, 0,
>>> >>> 1, 2, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1,
>>> >>> 2, 0, 1, 2, 0, 1, 2, 0, 1, 2), Fmm = c(0, 0, 0, 0.7, 0.59,
>>> >>> 0.64, 1, 1, 1, 0, 0, 0, 0, 0.63, 0.7, 0.74, 0.68, 1, 1, 1,
>>> >>> 1, 0, 0, 0, 0.62, 0.63, 0.6, 0.63, 0.6, 0.68, 1, 1, 1), Fnn = c(0,
>>> >>> 0.64, 1, 0, 0.51, 1, 0, 0.67, 1, 0, 0.62, 0.69, 1, 0, 0.54,
>>> >>> 0.62, 1, 0, 0.63, 0.73, 1, 0, 0.63, 1, 0, 0.7, 1, 0, 0.7,
>>> >>> 1, 0, 0.58, 1), Qm = c(1, 1, 1, 0.65, 0.45, 0.36, 0.5, 0.165,
>>> >>> 0, 1, 1, 1, 1, 0.685, 0.38, 0.32, 0.32, 0.5, 0.185, 0.135,
>>> >>> 0, 1, 1, 1, 0.69, 0.37, 0.4, 0.685, 0.4, 0.32, 0.5, 0.21,
>>> >>> 0), Qn = c(1, 0.36, 0, 0.65, 0.45, 0, 0.5, 0.165, 0, 1, 0.38,
>>> >>> 0.31, 0, 0.685, 0.38, 0.32, 0, 0.5, 0.185, 0.135, 0, 1, 0.37,
>>> >>> 0, 0.69, 0.3, 0, 0.685, 0.3, 0, 0.5, 0.21, 0), term1_p0 =
>>> c(0.81450625,
>>> >>> 0.0857375, 0.00225625, 0.0857375, 0.009025, 0.0002375, 0.00225625,
>>> >>> 0.0002375, 6.25e-06, 0.7737809375, 0.1221759375,
>>> 0.00643031249999999,
>>> >>> 0.0001128125, 0.081450625, 0.012860625, 0.000676875, 1.1875e-05,
>>> >>> 0.0021434375, 0.0003384375, 1.78125e-05, 3.125e-07, 0.7737809375,
>>> >>> 0.081450625, 0.0021434375, 0.1221759375, 0.012860625,
>>> 0.0003384375,
>>> >>> 0.00643031249999999, 0.000676875, 1.78125e-05, 0.0001128125,
>>> >>> 1.1875e-05, 3.125e-07), term1_p1 = c(0.4096, 0.2048, 0.0256,
>>> >>> 0.2048, 0.1024, 0.0128, 0.0256, 0.0128, 0.0016, 0.32768,
>>> >>> 0.24576, 0.06144, 0.00512, 0.16384, 0.12288, 0.03072, 0.00256,
>>> >>> 0.02048, 0.01536, 0.00384, 0.00032, 0.32768, 0.16384, 0.02048,
>>> >>> 0.24576, 0.12288, 0.01536, 0.06144, 0.03072, 0.00384, 0.00512,
>>> >>> 0.00256, 0.00032)), .Names = c("m1", "n1", "x1", "y1", "Fmm",
>>> >>>"Fnn", "Qm", "Qn", "term1_p0", "term1_p1"), row.names = c(NA,
>>> >>>33L), class = "data.frame")
>>> >>>
>>> >>>library(zoo)
>>> >>>lst1<- split(d,list(d$m1,d$n1))
>>> >>>res2<-do.call(rbind,lapply(lst1[lapply(lst1,nrow)!=0],function(x){
>>> >>>x[,11:14]<-NA;
>>> >>>x[,11:12][x$Qm<=c11,]<-cumsum(x[,9:10][x$Qm<=c11,]);
>>> >>>x[,13:14][x$Qn<=c12,]<-cumsum(x[,9:10][x$Qn<=c12,]);
>>> >>>colnames(x)[11:14]<-
>>> c("cterm1_P0L","cterm1_P1L","cterm1_P0H","cterm1_P1H");
>>> >>>x1<-na.locf(x);
>>> >>>x1[,11:14][is.na(x1[,11:14])]<-0;
>>> >>>x1}))
>>> >>>row.names(res2)<- 1:nrow(res2)
>>> >>>
>>> >>> res2
>>> >>> # m1 n1 x1 y1 Fmm Fnn Qm Qn term1_p0 term1_p1
>>> cterm1_P0L
>>> >>>cterm1_P1L cterm1_P0H cterm1_P1H
>>> >>>
>>> >>>#1 2 2 0 0 0.00 0.00 1.000 1.000 0.8145062500 0.40960
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#2 2 2 0 1 0.00 0.64 1.000 0.360 0.0857375000 0.20480
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#3 2 2 0 2 0.00 1.00 1.000 0.000 0.0022562500 0.02560
>>> 0.0000000000
>>> >>> 0.00000 0.0022562500 0.02560
>>> >>>#4 2 2 1 0 0.70 0.00 0.650 0.650 0.0857375000 0.20480
>>> 0.0000000000
>>> >>> 0.00000 0.0022562500 0.02560
>>> >>>#5 2 2 1 1 0.59 0.51 0.450 0.450 0.0090250000 0.10240
>>> 0.0000000000
>>> >>> 0.00000 0.0022562500 0.02560
>>> >>>#6 2 2 1 2 0.64 1.00 0.360 0.000 0.0002375000 0.01280
>>> 0.0000000000
>>> >>> 0.00000 0.0024937500 0.03840
>>> >>>#7 2 2 2 0 1.00 0.00 0.500 0.500 0.0022562500 0.02560
>>> 0.0000000000
>>> >>> 0.00000 0.0024937500 0.03840
>>> >>>#8 2 2 2 1 1.00 0.67 0.165 0.165 0.0002375000 0.01280
>>> 0.0002375000
>>> >>> 0.01280 0.0027312500 0.05120
>>> >>>#9 2 2 2 2 1.00 1.00 0.000 0.000 0.0000062500 0.00160
>>> 0.0002437500
>>> >>> 0.01440 0.0027375000 0.05280
>>> >>>#10 3 2 0 0 0.00 0.00 1.000 1.000 0.7737809375 0.32768
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#11 3 2 0 1 0.00 0.63 1.000 0.370 0.0814506250 0.16384
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#12 3 2 0 2 0.00 1.00 1.000 0.000 0.0021434375 0.02048
>>> 0.0000000000
>>> >>> 0.00000 0.0021434375 0.02048
>>> >>>#13 3 2 1 0 0.62 0.00 0.690 0.690 0.1221759375 0.24576
>>> 0.0000000000
>>> >>> 0.00000 0.0021434375 0.02048
>>> >>>#14 3 2 1 1 0.63 0.70 0.370 0.300 0.0128606250 0.12288
>>> 0.0000000000
>>> >>> 0.00000 0.0021434375 0.02048
>>> >>>#15 3 2 1 2 0.60 1.00 0.400 0.000 0.0003384375 0.01536
>>> 0.0000000000
>>> >>> 0.00000 0.0024818750 0.03584
>>> >>>#16 3 2 2 0 0.63 0.00 0.685 0.685 0.0064303125 0.06144
>>> 0.0000000000
>>> >>> 0.00000 0.0024818750 0.03584
>>> >>>#17 3 2 2 1 0.60 0.70 0.400 0.300 0.0006768750 0.03072
>>> 0.0000000000
>>> >>> 0.00000 0.0024818750 0.03584
>>> >>>#18 3 2 2 2 0.68 1.00 0.320 0.000 0.0000178125 0.00384
>>> 0.0000000000
>>> >>> 0.00000 0.0024996875 0.03968
>>> >>>#19 3 2 3 0 1.00 0.00 0.500 0.500 0.0001128125 0.00512
>>> 0.0000000000
>>> >>> 0.00000 0.0024996875 0.03968
>>> >>>#20 3 2 3 1 1.00 0.58 0.210 0.210 0.0000118750 0.00256
>>> 0.0000000000
>>> >>> 0.00000 0.0024996875 0.03968
>>> >>>#21 3 2 3 2 1.00 1.00 0.000 0.000 0.0000003125 0.00032
>>> 0.0000003125
>>> >>> 0.00032 0.0025000000 0.04000
>>> >>>#22 2 3 0 0 0.00 0.00 1.000 1.000 0.7737809375 0.32768
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#23 2 3 0 1 0.00 0.62 1.000 0.380 0.1221759375 0.24576
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#24 2 3 0 2 0.00 0.69 1.000 0.310 0.0064303125 0.06144
>>> 0.0000000000
>>> >>> 0.00000 0.0000000000 0.00000
>>> >>>#25 2 3 0 3 0.00 1.00 1.000 0.000 0.0001128125 0.00512
>>> 0.0000000000
>>> >>> 0.00000 0.0001128125 0.00512
>>> >>>#26 2 3 1 0 0.63 0.00 0.685 0.685 0.0814506250 0.16384
>>> 0.0000000000
>>> >>> 0.00000 0.0001128125 0.00512
>>> >>>#27 2 3 1 1 0.70 0.54 0.380 0.380 0.0128606250 0.12288
>>> 0.0000000000
>>> >>> 0.00000 0.0001128125 0.00512
>>> >>>#28 2 3 1 2 0.74 0.62 0.320 0.320 0.0006768750 0.03072
>>> 0.0000000000
>>> >>> 0.00000 0.0001128125 0.00512
>>> >>>#29 2 3 1 3 0.68 1.00 0.320 0.000 0.0000118750 0.00256
>>> 0.0000000000
>>> >>> 0.00000 0.0001246875 0.00768
>>> >>>#30 2 3 2 0 1.00 0.00 0.500 0.500 0.0021434375 0.02048
>>> 0.0000000000
>>> >>> 0.00000 0.0001246875 0.00768
>>> >>>#31 2 3 2 1 1.00 0.63 0.185 0.185 0.0003384375 0.01536
>>> 0.0003384375
>>> >>> 0.01536 0.0004631250 0.02304
>>> >>>#32 2 3 2 2 1.00 0.73 0.135 0.135 0.0000178125 0.00384
>>> 0.0003562500
>>> >>> 0.01920 0.0004809375 0.02688
>>> >>>#33 2 3 2 3 1.00 1.00 0.000 0.000 0.0000003125 0.00032
>>> 0.0003565625
>>> >>> 0.01952 0.0004812500 0.02720
>>> >>>
>>> >>>#Sorry, some values in my previous solution didn't look right. I
>>> didn't
>>> >>>A.K.
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>----- Original Message -----
>>> >>>From: Zjoanna <[hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=15>>
>>>
>>> >>>To: [hidden email]<http://user/SendEmail.jtp?type=node&node=4657773&i=16>
>>
>>> >>>Cc:
>>> >>>Sent: Friday, February 1, 2013 12:19 PM
>>> >>>Subject: Re: [R] cumulative sum by group and under some criteria
>>> >>>
>>> >>>Thank you very much for your reply. Your code work well with this
>>> example.
>>> >>>I modified a little to fit my real data, I got an error massage.
>>> >>>
>>> >>>Error in split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) :
>>> >>> Group length is 0 but data length > 0
>>> >>>
>>> >>>
>>> >>>On Thu, Jan 31, 2013 at 12:21 PM, arun kirshna [via R] <
>>> >>>[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=17>>
>>
>>> wrote:
>>> >>>
>>> >>>> Hi,
>>> >>>> Try this:
>>> >>>> colnames(d)<-c("m1","n1","x1","y1","p11","p12")
>>> >>>> library(zoo)
>>> >>>> res1<-
>>> do.call(rbind,lapply(lapply(split(d,list(d$m1,d$n1)),function(x)
>>> >>>> {x$cp11[x$x1>1]<- cumsum(x$p11[x$x1>1]);x$cp12[x$y1>1]<-
>>> >>>> cumsum(x$p12[x$y1>1]);x}),function(x)
>>> >>>> {x$cp11<-na.locf(x$cp11,na.rm=F);x$cp12<-
>>> na.locf(x$cp12,na.rm=F);x}))
>>> >>>> #there would be a warning here as one of the list element is NULL.
>>> The,
>>> >>>> warning is okay
>>> >>>> row.names(res1)<- 1:nrow(res1)
>>> >>>> res1[,7:8][is.na(res1[,7:8])]<- 0
>>> >>>> res1
>>> >>>> # m1 n1 x1 y1 p11 p12 cp11 cp12
>>> >>>> #1 2 2 0 0 0.00 0.00 0.00 0.00
>>> >>>> #2 2 2 0 1 0.00 0.50 0.00 0.00
>>> >>>> #3 2 2 0 2 0.00 1.00 0.00 1.00
>>> >>>> #4 2 2 1 0 0.50 0.00 0.00 1.00
>>> >>>> #5 2 2 1 1 0.50 0.50 0.00 1.00
>>> >>>> #6 2 2 1 2 0.50 1.00 0.00 2.00
>>> >>>> #7 2 2 2 0 1.00 0.00 1.00 2.00
>>> >>>> #8 2 2 2 1 1.00 0.50 2.00 2.00
>>> >>>> #9 2 2 2 2 1.00 1.00 3.00 3.00
>>> >>>> #10 3 2 0 0 0.00 0.00 0.00 0.00
>>> >>>> #11 3 2 0 1 0.00 0.50 0.00 0.00
>>> >>>> #12 3 2 0 2 0.00 1.00 0.00 1.00
>>> >>>> #13 3 2 1 0 0.33 0.00 0.00 1.00
>>> >>>> #14 3 2 1 1 0.33 0.50 0.00 1.00
>>> >>>> #15 3 2 1 2 0.33 1.00 0.00 2.00
>>> >>>> #16 3 2 2 0 0.67 0.00 0.67 2.00
>>> >>>> #17 3 2 2 1 0.67 0.50 1.34 2.00
>>> >>>> #18 3 2 2 2 0.67 1.00 2.01 3.00
>>> >>>> #19 3 2 3 0 1.00 0.00 3.01 3.00
>>> >>>> #20 3 2 3 1 1.00 0.50 4.01 3.00
>>> >>>> #21 3 2 3 2 1.00 1.00 5.01 4.00
>>> >>>> #22 2 3 0 0 0.00 0.00 0.00 0.00
>>> >>>> #23 2 3 0 1 0.00 0.33 0.00 0.00
>>> >>>> #24 2 3 0 2 0.00 0.67 0.00 0.67
>>> >>>> #25 2 3 0 3 0.00 1.00 0.00 1.67
>>> >>>> #26 2 3 1 0 0.50 0.00 0.00 1.67
>>> >>>> #27 2 3 1 1 0.50 0.33 0.00 1.67
>>> >>>> #28 2 3 1 2 0.50 0.67 0.00 2.34
>>> >>>> #29 2 3 1 3 0.50 1.00 0.00 3.34
>>> >>>> #30 2 3 2 0 1.00 0.00 1.00 3.34
>>> >>>> #31 2 3 2 1 1.00 0.33 2.00 3.34
>>> >>>> #32 2 3 2 2 1.00 0.67 3.00 4.01
>>> >>>> #33 2 3 2 3 1.00 1.00 4.00 5.01
>>> >>>> A.K.
>>> >>>>
>>> >>>> ------------------------------
>>> >>>> If you reply to this email, your message will be added to the
>>> discussion
>>> >>>> below:
>>> >>>>
>>> >>>>
>>> http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4657196.html
>>> >>>> To unsubscribe from cumulative sum by group and under some criteria,
>>> click
>>> >>>> here<
>>>
>>> >>>> .
>>> >>>> NAML<
>>> http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>>
>>> >>>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>--
>>> >>>View this message in context:
>>> >>>
>>> http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4657315.html
>>> >>>Sent from the R help mailing list archive at Nabble.com.
>>> >>> [[alternative HTML version deleted]]
>>> >>>
>>> >>>______________________________________________
>>> >>>[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=18>mailing list
>>
>>> >>>https://stat.ethz.ch/mailman/listinfo/r-help
>>> >>>PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>>
>>> >>>and provide commented, minimal, self-contained, reproducible code.
>>> >>>
>>> >>>
>>> >>>______________________________________________
>>> >>>[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=19>mailing list
>>
>>> >>>https://stat.ethz.ch/mailman/listinfo/r-help
>>> >>>PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>>
>>> >>>and provide commented, minimal, self-contained, reproducible code.
>>> >>>
>>> >>></quote>
>>> >>>Quoted from:
>>> >>>
>>> http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4657360.html
>>> >>>
>>> >>>
>>> >>>______________________________________________
>>> >>>[hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=20>mailing list
>>
>>> >>>https://stat.ethz.ch/mailman/listinfo/r-help
>>> >>>PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>>
>>> >>>and provide commented, minimal, self-contained, reproducible code.
>>> >>>
>>> >>></quote>
>>> >>>Quoted from:
>>> >>>
>>> http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4657582.html
>>> >>>
>>> >>>
>>> >>
>>> >
>>>
>>> ______________________________________________
>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4657773&i=21>mailing list
>>
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>>
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>>
>>
>>> ------------------------------
>>> If you reply to this email, your message will be added to the
>>> discussion below:
>>>
>>
>>> http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4657773.html
>>> To unsubscribe from cumulative sum by group and under some criteria, click
>>> here<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4657074&code=WmpvYW5uYTIwMTNAZ21haWwuY29tfDQ2NTcwNzR8LTE3NTE1MDA0MzY=>
>>
>>> .
>>> NAML<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>>
>>
>>
>>
>>
>>--
>>View this message in context: http://r.789695.n4.nabble.com/cumulative-sum-by-group-and-under-some-criteria-tp4657074p4658133.html
>>
>>Sent from the R help mailing list archive at Nabble.com.
>> [[alternative HTML version deleted]]
>>
>>______________________________________________
>>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.
>>
>>
>
More information about the R-help
mailing list