[R] Combining all possible values of variables into a new...

Gustaf Rydevik gustaf.rydevik at gmail.com
Mon Oct 20 16:32:03 CEST 2008


On Mon, Oct 20, 2008 at 4:10 PM,  <stefan.petersson at inizio.se> wrote:
>
> I'm trying to create a new column in my data.frame where subjects are categorized depending on values on four other columns. In any other case I would just nest a few ifelse statements, however, in this case i have 4*6*2*3=144 combinations and i get weird 'context overflow' errors. So I wonder if there is a more efficient way of doing this.
>
> For illustrational purposes, let's say i have:
>
> x<-c(1,0,0,1,0,0,1,0,0,1)
> y<-c(1,3,2,3,2,1,2,3,2,3)
> z<-c(1,2,1,2,1,2,1,2,1,2)
> d<-as.data.frame(cbind(x,y,z))
>
> and i do:
>
> d$myvar <- ifelse(d$x == 0 & d$y==1 & d$z==1 , d$myvar <- 1,
> ifelse(d$x == 0 & d$y==1 & d$z==2 , d$myvar <- 2,
> ifelse(d$x == 0 & d$y==2 & d$z==1 , d$myvar <- 3,
> ifelse(d$x == 0 & d$y==2 & d$z==2 , d$myvar <- 4,
> ifelse(d$x == 0 & d$y==3 & d$z==1 , d$myvar <- 5,
> ifelse(d$x == 0 & d$y==3 & d$z==2 , d$myvar <- 6,
> ifelse(d$x == 1 & d$y==1 & d$z==1 , d$myvar <- 7,
> ifelse(d$x == 1 & d$y==1 & d$z==2 , d$myvar <- 8,
> ifelse(d$x == 1 & d$y==2 & d$z==1 , d$myvar <- 9,
> ifelse(d$x == 1 & d$y==2 & d$z==2 , d$myvar <- 10,
> ifelse(d$x == 1 & d$y==3 & d$z==1 , d$myvar <- 11,
> ifelse(d$x == 1 & d$y==3 & d$z==2 , d$myvar <- 12, NA))))))))))))
>
> Suggestions?

How about the following?

x<-c(1,0,0,1,0,0,1,0,0,1)
y<-c(1,3,2,3,2,1,2,3,2,3)
z<-c(1,2,1,2,1,2,1,2,1,2)
d<-as.data.frame(cbind(x,y,z))

xyz.comb<-interaction(x,y,z,lex.order=T)
d$myvar<-match(xyz.comb,levels(xyz.comb))


/Gustaf


Gustaf Rydevik, M.Sci.
tel: +46(0)703 051 451
address:Essingetorget 40,112 66 Stockholm, SE
skype:gustaf_rydevik



More information about the R-help mailing list