[R] cumulative sum by group and under some criteria

arun smartpink111 at yahoo.com
Mon Feb 18 03:09:44 CET 2013


Hi,


"Yes, I wanted to expand directly from d. If there are other variables, 
says "A", "B", "C" that I need to keep  in the final expanded data, how 
to modify the code?"

d<-data.frame()
for (m1 in 2:3) {
    for (n1 in 2:2) {
        for (x1 in 0:(m1-1)) {
            for (y1 in 0:(n1-1)) {
d<-rbind(d,c(m1,n1,x1,y1))
}
}
}}
colnames(d)<-c("m1","n1","x1","y1")
d
res1<-do.call(rbind,lapply(unique(d$m1),function(m1) 
do.call(rbind,lapply(unique(d$n1),function(n1) 
do.call(rbind,lapply(0:(m1-1),function(x1) 
do.call(rbind,lapply(0:(n1-1),function(y1) 
do.call(rbind,lapply((m1+2):(7-n1),function(m) 
do.call(rbind,lapply((n1+2):(9-m),function(n) 
do.call(rbind,lapply(x1:(x1+m-m1), function(x) 
expand.grid(m1,n1,x1,y1,m,n,x)) ))))))))))))) 
 names(res1)<- c("m1","n1","x1","y1","m","n","x") 

set.seed(235)
 d$A<- sample(1:50,10,replace=TRUE)
 set.seed(23)
 d$B<- sample(1:50,10,replace=TRUE)

 d
 #  m1 n1 x1 y1  A  B
#1   2  2  0  0 50 29
#2   2  2  0  1 40 12
#3   2  2  1  0 31 17
#4   2  2  1  1  7 36
#5   3  2  0  0 13 41
#6   3  2  0  1 27 22
#7   3  2  1  0 49 49
#8   3  2  1  1 47 49
#9   3  2  2  0 23 43
#10  3  2  2  1  4 50
library(plyr)
res2<- join(res1,d,by=c("m1","n1","x1","y1"),type="full")
res2
 #  m1 n1 x1 y1 m n x  A  B
#1   2  2  0  0 4 4 0 50 29
#2   2  2  0  0 4 4 1 50 29
#3   2  2  0  0 4 4 2 50 29
#4   2  2  0  0 4 5 0 50 29
#5   2  2  0  0 4 5 1 50 29
#6   2  2  0  0 4 5 2 50 29
#7   2  2  0  0 5 4 0 50 29
#8   2  2  0  0 5 4 1 50 29
#9   2  2  0  0 5 4 2 50 29
#10  2  2  0  0 5 4 3 50 29
#11  2  2  0  1 4 4 0 40 12
#12  2  2  0  1 4 4 1 40 12
#13  2  2  0  1 4 4 2 40 12
#14  2  2  0  1 4 5 0 40 12
#15  2  2  0  1 4 5 1 40 12
#16  2  2  0  1 4 5 2 40 12
#17  2  2  0  1 5 4 0 40 12
#18  2  2  0  1 5 4 1 40 12
#19  2  2  0  1 5 4 2 40 12
#20  2  2  0  1 5 4 3 40 12
#21  2  2  1  0 4 4 1 31 17
#22  2  2  1  0 4 4 2 31 17
#23  2  2  1  0 4 4 3 31 17
#24  2  2  1  0 4 5 1 31 17
#25  2  2  1  0 4 5 2 31 17
#26  2  2  1  0 4 5 3 31 17
#27  2  2  1  0 5 4 1 31 17
#28  2  2  1  0 5 4 2 31 17
#29  2  2  1  0 5 4 3 31 17
#30  2  2  1  0 5 4 4 31 17
#31  2  2  1  1 4 4 1  7 36
#32  2  2  1  1 4 4 2  7 36
#33  2  2  1  1 4 4 3  7 36
#34  2  2  1  1 4 5 1  7 36
#35  2  2  1  1 4 5 2  7 36
#36  2  2  1  1 4 5 3  7 36
#37  2  2  1  1 5 4 1  7 36
#38  2  2  1  1 5 4 2  7 36
#39  2  2  1  1 5 4 3  7 36
#40  2  2  1  1 5 4 4  7 36
#41  3  2  0  0 5 4 0 13 41
#42  3  2  0  0 5 4 1 13 41
#43  3  2  0  0 5 4 2 13 41
#44  3  2  0  1 5 4 0 27 22
#45  3  2  0  1 5 4 1 27 22
#46  3  2  0  1 5 4 2 27 22
#47  3  2  1  0 5 4 1 49 49
#48  3  2  1  0 5 4 2 49 49
#49  3  2  1  0 5 4 3 49 49
#50  3  2  1  1 5 4 1 47 49
#51  3  2  1  1 5 4 2 47 49
#52  3  2  1  1 5 4 3 47 49
#53  3  2  2  0 5 4 2 23 43
#54  3  2  2  0 5 4 3 23 43
#55  3  2  2  0 5 4 4 23 43
#56  3  2  2  1 5 4 2  4 50
#57  3  2  2  1 5 4 3  4 50
#58  3  2  2  1 5 4 4  4 50
A.K.








----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: Joanna Zhang <zjoanna2013 at gmail.com>
Cc: R help <r-help at r-project.org>
Sent: Saturday, February 16, 2013 11:49 PM
Subject: Re: [R] cumulative sum by group and under some criteria



d2<- data.frame()
for (m1 in 2:3) {
    for (n1 in 2:2) {
        for (x1 in 0:(m1-1)) {
            for (y1 in 0:(n1-1)) {
        for (m in (m1+2): (7-n1)){
               for (n in (n1+2):(9-m)){
               for (x in x1:(x1+m-m1)){ 
 d2<- rbind(d2,c(m1,n1,x1,y1,m,n,x))
 }}}}}}}
colnames(d2)<-c("m1","n1","x1","y1","m","n","x")

res<-do.call(rbind,lapply(2:3,function(m1) do.call(rbind,lapply(2:2,function(n1) do.call(rbind,lapply(0:(m1-1),function(x1) do.call(rbind,lapply(0:(n1-1),function(y1) do.call(rbind,lapply((m1+2):(7-n1),function(m) do.call(rbind,lapply((n1+2):(9-m),function(n) do.call(rbind,lapply(x1:(x1+m-m1), function(x) expand.grid(m1,n1,x1,y1,m,n,x)) )))))))))))))
names(res)<- c("m1","n1","x1","y1","m","n","x")
 attr(res,"out.attrs")<-NULL
 identical(d2,res)
#[1] TRUE
A.K.

________________________________
From: Joanna Zhang <zjoanna2013 at gmail.com>
To: arun <smartpink111 at yahoo.com> 
Sent: Saturday, February 16, 2013 8:46 PM
Subject: Re: [R] cumulative sum by group and under some criteria


Hi,
What I need is to expand each row by adding several columns and . Let me restate the question. I have a dataset d, I want to expand it to d2 showed below. 
d<-data.frame()
for (m1 in 2:3) {
    for (n1 in 2:2) {
        for (x1 in 0:(m1-1)) {
            for (y1 in 0:(n1-1)) {
d<-rbind(d,c(m1,n1,x1,y1))
}
}
}}
colnames(d)<-c("m1","n1","x1","y1")
d

   m1 n1 x1 y1
1   2  2  0  0
2   2  2  0  1
3   2  2  1  0
4   2  2  1  1
5   3  2  0  0
6   3  2  0  1
7   3  2  1  0
8   3  2  1  1
9   3  2  2  0
10  3  2  2  1
I want to expand it as follows:
for (m in (m1+2): (7-n1){
    for (n in (n1+2):(9-m){
        for (x in x1:(x1+m-m1){          
}}}
so for the first row, 
   m1 n1 x1 y1
1   2  2  0  0
it should be expanded as
   m1 n1 x1 y1  m  n  x 
    2  2  0  0  4  4  0
    2  2  0  0  4  4  1 
    2  2  0  0  4  4  2
    2  2  0  0  4  5  0
    2  2  0  0  4  5  1
    2  2  0  0  4  5  2

On Tue, Feb 12, 2013 at 8:19 PM, arun <smartpink111 at yahoo.com> wrote:

Hi,
>
>Saw your reply again in Nabble.  I thought I sent you the solution previously.
>
>
>res3new<-  aggregate(.~m1+n1,data=res2[,c(1:2,12:13)],max) 
>
> d2<-res3new[res3new[,3]<0.01 & res3new[,4]<0.01,] 
>
>
>m1<- 3 #from d2
>maxN<- 9
>n1<- 2 #from d2
>
>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