or if x, y and z are factors : > dbis <- as.data.frame(apply(d, 2, as.factor)
> dbis$x:dbis$y:dbis$z [1] 1:1:1 0:3:2 0:2:1 1:3:2 0:2:1 0:1:2 1:2:1 0:3:2 0:2:1 1:3:2 12 Levels: 0:1:1 0:1:2 0:2:1 0:2:2 0:3:1 0:3:2 1:1:1 1:1:2 1:2:1 ... 1:3:2 and for your results : > as.numeric(dbis$x:dbis$y:dbis$z) [1] 7 6 3 12 3 2 9 6 3 12 2008/10/20 Dimitris Rizopoulos <[EMAIL PROTECTED]> > try this: > > 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 <- data.frame(x, y, z) > > ind <- do.call("paste", c(expand.grid(1:2, 1:3, 0:1)[3:1], sep = "\r")) > trg <- do.call("paste", c(d, sep = "\r")) > d$myvar <- match(trg, ind) > > > I hope it helps. > > Best, > Dimitris > > > > [EMAIL PROTECTED] 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? >> >> ______________________________________________ >> 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. >> >> > -- > Dimitris Rizopoulos > Assistant Professor > Department of Biostatistics > Erasmus Medical Center > > Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands > Tel: +31/(0)10/7043478 > Fax: +31/(0)10/7043014 > > > ______________________________________________ > 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]] ______________________________________________ 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.