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 <d.rizopoulos@erasmusmc.nl>

> 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
>
>
>
> stefan.petersson@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?
>>
>> ______________________________________________
>> 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]]

