yes, thanks you pointed me in the right direction: split/unplist was the trick
I completely left behind that possibility! here the final version ############ mynorm <- function(x) {(x - min(x, na.rm=TRUE))/(max(x, na.rm=TRUE) - min(x, na.rm=TRUE))} mydf<-data.frame(blocks=rep(c("a","b","c"),each=5), v1=round(runif(15,10,25),0), v2=round(rnorm(15,30,5),0)) g <- mydf$blocks l <- split(mydf, g) l <- lapply(l, transform, v1.mod = mynorm(v1)) mydf_new <- unsplit(l, g) ############ thanks again massimo ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.