Simon Kiss
2015-Apr-02 19:30 UTC
[R] recode the same subset of variables in several list elements
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]]
Jim Lemon
2015-Apr-02 22:30 UTC
[R] recode the same subset of variables in several list elements
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 <sjkiss at 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 at 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.[[alternative HTML version deleted]]
Simon Kiss
2015-Apr-06 14:33 UTC
[R] recode the same subset of variables in several list elements
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 <drjimlemon at 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 <sjkiss at gmail.com <mailto:sjkiss at 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 at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help <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]]