how to sum up rows selectively in R? -


here head of data sample.

         size      ofr       bid               1       362.25    361.75               1       362.25    361.75               3       362.25    361.75               4       362.75    362                 8       362.50    362                  6       362.50    362                  12      362.50    362                   8       362.25    362                  9       362.25    362                  11      362.25    362         

i trying implement loop sum size if ofr[i]=ofr[i-1] & bid[i]= bid[i-1]. in new data frame, there fewer rows.

my current coding is:

l<-length(mtq$size) mtq$size1<-c() (i in 2:l) {    if ( mtq$bid[i] == mtq$bid[i-1] | mtq$ofr[i] == mtq$ofr[i-1])    {mtq$size1=mtq$size[i]+mtq$size[i-1]} } 

it keeps saying argument length 0.

anyone has suggestion me?

ultimately, need follows:

     size      ofr       bid    size1       1       362.25    361.75    na       1       362.25    361.75    na       3       362.25    361.75    5 "(this 1+1+3)"        4       362.75    362       4       8       362.50    362       na       6       362.50    362       na       12      362.50    362       26 "(this 8+6+12)"       8       362.25    362       na       9       362.25    362       na       11      362.25    362       28 "(8+9+11)" 

then can drop nas , leave 4 rows @ end.

try

indx <- with(mtq, bid[-1]==bid[-length(bid)] | ofr[-1]==ofr[-length(ofr)] ) mtq$size1 <- with(mtq, c(na,ifelse(indx, size[-1]+size[-length(size)], na))) 

or using devel version of data.table i.e. v1.9.5. instructions install here

library(data.table)#v1.9.5+ setdt(mtq)[bid==shift(bid)|ofr==shift(ofr), size1 := size+shift(size, fill=0)]  

update

based on expected output

 setdt(mtq)[,  size1 := if(.n==1) size  else c(rep(na, .n-1), sum(size)),   list(gr=cumsum(shift(bid, fill=false)!= bid|shift(ofr, fill=false)!=ofr))]   #size    ofr    bid size1  #1:    1 362.25 361.75    na  #2:    1 362.25 361.75    na  #3:    3 362.25 361.75     5  #4:    4 362.75 362.00     4  #5:    8 362.50 362.00    na  #6:    6 362.50 362.00    na  #7:   12 362.50 362.00    26  #8:    8 362.25 362.00    na  #9:    9 362.25 362.00    na  #10:  11 362.25 362.00    28 

data

 mtq <- structure(list(size = c(1l, 1l, 3l, 4l, 8l, 6l, 12l, 8l, 9l,   11l), ofr = c(362.25, 362.25, 362.25, 362.75, 362.5, 362.5, 362.5,   362.25, 362.25, 362.25), bid = c(361.75, 361.75, 361.75, 362,   362, 362, 362, 362, 362, 362)), .names = c("size", "ofr", "bid"  ), class = "data.frame", row.names = c(na, -10l)) 

Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -