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. ______________________________________________ R-help@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.