[R] recode the same subset of variables in several list elements

Jim Lemon drjimlemon at gmail.com
Tue Apr 7 09:18:54 CEST 2015


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 <sjkiss at 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 <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> 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
>> <http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list