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

2008-10-20 Thread Dimitris Rizopoulos

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.


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

2008-10-20 Thread David Hajage
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.


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

2008-10-20 Thread Gustaf Rydevik
On Mon, Oct 20, 2008 at 4:10 PM,  [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?

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

__
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.