Re: [R] Combining all possible values of variables into a new...
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...
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...
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.