[R] use 'lapply' to creat 2 new columns based on old ones in a data frame

runner sunnyside500 at gmail.com
Sat Oct 13 01:46:02 CEST 2007


There is a dataset 'm', which has 3 columns: 'index', 'old1' and 'old2';

I want to create 2 new columns: 'new1' and 'new2' on this condition: 
if 'index'==i, then 'new1'='old1'+add[i].
'add' is a vector of numbers to be added to old columns, e.g. add=c(10,20,30
...)
 
Like this:

index	    old1	    old2	    new1	    new2
1	    	    5	    	    6	    	    15	    	    16
2	    	    5	    	    6	   	      25	    	    26
3	    	    5	    	    6	    	    35	    	    36
3	    	    50	    	   60	    	   80	    	   90

Since the actual dataset is huge, I use 'lapply'. I am able to add 1 column:

do.call(rbind, lapply( 1:nrow(m), 
                            function(i) {m$new1[i]=m[i,2]+add[m[i,1]];
return (m[i,])} 
                           ))

but don't know how to do for 2 columns at the same time, sth. like this
simply doesn't work:
do.call(rbind,lapply(1:nrow(m), 
                          function(i){ m$new1[i]=m[i,2]+add[m[i,1]]; 
                                          m$new2[i]=m[i,3]+add[m[i,1]]; 
                                          return (m[i,])}
                         ))
Could you please tell me how? or any other better approach?


-- 
View this message in context: http://www.nabble.com/use-%27lapply%27-to-creat-2-new-columns-based-on-old-ones-in-a-data-frame-tf4616650.html#a13184905
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list