Esmail Bonakdarian
2008-May-07 01:43 UTC
[R] Automatically generating new column names (and columns)
Once again I need to tap into the collective knowledge here. Let's say I have the following columns and data below Y X1 X2 X3 X4 I would like to generate additional new columns and column names (ie the data would be squared - and I'd like the column names to reflect this) like: Y X1 X2 X3 X4 X1^2 X2^2 X3^2 X4^2 I believe I can compute the values correctly with the code below, but I am unable to generate the column names. (This is a short example, in reality I have many more columns and more complicated names) for(i in 2:5) { name=get(paste(names(simpleData)[i],"^2", sep="")) simpleData<- transform(simpleData, name=(simpleData[,i]^2)) } print(simpleData) Any suggestions/hints .. I've searched the FAQ and web (this is how I came across the get() function) but no luck so far. Thanks, Esmail
Jorge Ivan Velez
2008-May-07 02:13 UTC
[R] Automatically generating new column names (and columns)
Hi Esmail, Try this: # A simple example set.seed(123) X=matrix(rnorm(100*5),ncol=5) colnames(X)=c("Y",paste("X",1:4,sep="")) X[1:5,] Y X1 X2 X3 X4 [1,] -0.56047565 -0.7104066 2.1988103 -0.7152422 -0.07355602 [2,] -0.23017749 0.2568837 1.3124130 -0.7526890 -1.16865142 [3,] 1.55870831 -0.2466919 -0.2651451 -0.9385387 -0.63474826 [4,] 0.07050839 -0.3475426 0.5431941 -1.0525133 -0.02884155 [5,] 0.12928774 -0.9516186 -0.4143399 -0.4371595 0.67069597 # Square values X2=X[,2:5]^2 # Result res=cbind(X,X2) colnames(res)=c(colnames(X),paste(colnames(X)[-1],"^2",sep="")) res[1:5,] Y X1 X2 X3 X4 X1^2 X2^2 X3^2 X4^2 [1,] -0.56047565 -0.7104066 2.1988103 -0.7152422 -0.07355602 0.50467749 4.8347670 0.5115714 0.0054104880 [2,] -0.23017749 0.2568837 1.3124130 -0.7526890 -1.16865142 0.06598924 1.7224278 0.5665407 1.3657461518 [3,] 1.55870831 -0.2466919 -0.2651451 -0.9385387 -0.63474826 0.06085688 0.0703019 0.8808549 0.4029053598 [4,] 0.07050839 -0.3475426 0.5431941 -1.0525133 -0.02884155 0.12078586 0.2950598 1.1077842 0.0008318352 [5,] 0.12928774 -0.9516186 -0.4143399 -0.4371595 0.67069597 0.90557790 0.1716776 0.1911085 0.4498330825 HTH, Jorge On Tue, May 6, 2008 at 9:43 PM, Esmail Bonakdarian <esmail.js@gmail.com> wrote:> Once again I need to tap into the collective knowledge here. > > Let's say I have the following columns and data below > > Y X1 X2 X3 X4 > > I would like to generate additional new columns and column names > (ie the data would be squared - and I'd like the column names to > reflect this) like: > > Y X1 X2 X3 X4 X1^2 X2^2 X3^2 X4^2 > > > I believe I can compute the values correctly with the code below, but > I am unable to generate the column names. (This is a short example, in > reality I have many more columns and more complicated names) > > for(i in 2:5) > { > name=get(paste(names(simpleData)[i],"^2", sep="")) > simpleData<- transform(simpleData, name=(simpleData[,i]^2)) > } > > print(simpleData) > > Any suggestions/hints .. I've searched the FAQ and web (this is how I > came across the get() function) but no luck so far. > > Thanks, > Esmail > > ______________________________________________ > 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. >[[alternative HTML version deleted]]