> d <- " + order_date,item,col4,col3 + 2000-01-01,D,1,10 + 2000-01-01,C,1,10 + 2000-01-01,M,1,10 + 2000-01-01,N,1,50 + 2000-01-01,Z,1,10 + 2000-01-01,X,1,10 + 2001-01-02,Z,1,0 + 2001-01-02,X,1,50" > > df = read.csv(textConnection(d)) > > # data.frame + plyr approach > > require(plyr) Loading required package: plyr > ddply( + df[df$col3<25,], + .(order_date), + summarize, + col1=sum(item %in% c("D","C","B") & col4), + col2=sum(!item %in% c("Z","X","Y") & col4) + ) order_date col1 col2 1 2000-01-01 2 3 2 2001-01-02 0 0 > > # data.table approach, thanks to jangorecki > > require(data.table) Loading required package: data.table > dt = data.table(df) > > dt[col3 < 25, + .(col1 = sum(col4[item %in% c("D","C","B")]), + col2 = sum(col4[!item %in% c("Z","X","Y")])), + by = .(order_date)] order_date col1 col2 1: 2000-01-01 2 3 2: 2001-01-02 0 0 >