Hi Simon, Let's see. If I wrap the code into a function: reverse.df.elements<-function(df,pattern="i",newrange=c(3,1)) { revlist<-grep(pattern,names(df),fixed=TRUE) df[,revlist]<-sapply(df[,revlist],rescale,newrange) return(df) }
Then this might do the trick: lapply(list1,reverse.df.elements,pattern="i",newrange=c(3,1)) Allowing you to select which elements to reverse and specify the new range. Jim On Tue, Apr 7, 2015 at 12:33 AM, Simon Kiss <sjk...@gmail.com> wrote: > Hi Jim, So that does the rescale part very efficiently. But I’d like to > know how to do that on each list element using lapply or llply. I have > about 4 data frames and a few other recodes to do so automating would be > nice, rather than applying your code to each individual list element. > simon > > On Apr 2, 2015, at 6:30 PM, Jim Lemon <drjimle...@gmail.com> wrote: > > Hi Simon, > How about this? > > library(plotrix) > revlist<-grep("i",names(df),fixed=TRUE) > df[,revlist]<-sapply(df[,revlist],rescale,c(3,1)) > > Jim > > > On Fri, Apr 3, 2015 at 6:30 AM, Simon Kiss <sjk...@gmail.com> wrote: > >> Hi there: I have a list of data frames with identical variable names. >> I’d like to reverse scale the same variables in each data.frame. >> I’d appreciate any one’s suggestions as to how to accomplish this. Right >> now, I’m working with the code at the very bottom of my sample data. >> Thanks, Simon Kiss >> >> #Create data.frame1 >> df<-data.frame( >> ivar1=sample(c(1,2,3), replace=TRUE, size=100), >> ivar2=sample(c(1,2,3), replace=TRUE, size=100), >> hvar1=sample(c(1,2,3), replace=TRUE, size=100), >> hvar2=sample(c(1,2,3), replace=TRUE, size=100), >> evar1=sample(c(1,2,3), replace=TRUE, size=100), >> evar2=sample(c(1,2,3), replace=TRUE, size=100) >> ) >> >> #data.frame2 >> df1<-data.frame( >> ivar1=sample(c(1,2,3), replace=TRUE, size=100), >> ivar2=sample(c(1,2,3), replace=TRUE, size=100), >> hvar1=sample(c(1,2,3), replace=TRUE, size=100), >> hvar2=sample(c(1,2,3), replace=TRUE, size=100), >> evar1=sample(c(1,2,3), replace=TRUE, size=100), >> evar2=sample(c(1,2,3), replace=TRUE, size=100) >> ) >> >> #List >> list1<-list(df, df1) >> #vector of first variables I’d like to recode >> i.recodes<-grep('^i.', names(df), value=TRUE) >> #Vector of second variables to recode >> e.recodes<-grep('^e.', names(df), value=TRUE) >> >> #Set up RESCALE function from RPMG package >> RESCALE <- function (x, nx1, nx2, minx, maxx) >> { nx = nx1 + (nx2 - nx1) * (x - minx)/(maxx - minx) >> return(nx) >> } >> >> #This is what I’m playing around with >> test<-lapply(list1, function(y) { >> out<-y[,i.recodes] >> out<-lapply(out, function(x) RESCALE(x, 0,1,1,6)) >> y[,names(x)]<-out >> }) >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> 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 >> <http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. > > > > [[alternative HTML version deleted]] ______________________________________________ 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.