Re: [R] Vector Assignments
Your recommendations have worked great. I have found both cut and ifelse to be useful. I have one more question. When should I use factors over a character vector. I know that they have different uses. However, I am still trying to figure out how I can best take advantage of factors. The following is what I am really trying to do: colors - c(red,blue,green,black) y.col - colors[cut(y,c(-Inf,250,500,700,Inf),right=F,lab=F)] plot(x,y,col=y.col) Would using factors make this any cleaner? I think a character vector is all I need but I thought I would ask. Thanks for your help, Arend van der Veen On Tue, 2003-12-02 at 00:32, Gabor Grothendieck wrote: And one other thing. Are you sure you want character variables as the result of all this? A column whose entries are each one of four colors seems like a good job for a factor: colours - c(red, blue, green,black) cut(x, c(-Inf,250,500,700,Inf),right=F,lab=colours) --- Date: Mon, 1 Dec 2003 23:47:39 -0500 (EST) From: Gabor Grothendieck [EMAIL PROTECTED] To: [EMAIL PROTECTED], [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: [R] Vector Assignments Just some small refinements/corrections: colours - c(red, blue, green,back) colours[cut(x, c(-Inf,250,500,700,Inf),right=F,lab=F)] --- Date: Tue, 02 Dec 2003 14:38:55 +1300 From: Hadley Wickham [EMAIL PROTECTED] To: Arend P. van der Veen [EMAIL PROTECTED] Cc: R HELP [EMAIL PROTECTED] Subject: Re: [R] Vector Assignments One way would be to create a vector of colours and then cut() to index the vector: colours - c(red, blue, green,back) colours[cut(x, c(min(x),250,500,700,max(x)),lab=F)] Hadley Arend P. van der Veen wrote: Hi, I have simple R question. I have a vector x that contains real numbers. I would like to create another vector col that is the same length of x such that: if x[i] 250 then col[i] = red else if x[i] 500 then col[i] = blue else if x[i] 750 then col[i] = green else col[i] = black for all i I am convinced that there is probably a very efficient way to do this in R but I am not able to figure it out. Any help would be greatly appreciated. Thanks in advance, Arend van der Veen ___ No banners. No pop-ups. No kidding. Introducing My Way - http://www.myway.com __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
Re: [R] Vector Assignments
One way would be to create a vector of colours and then cut() to index the vector: colours - c(red, blue, green,back) colours[cut(x, c(min(x),250,500,700,max(x)),lab=F)] Hadley Arend P. van der Veen wrote: Hi, I have simple R question. I have a vector x that contains real numbers. I would like to create another vector col that is the same length of x such that: if x[i] 250 then col[i] = red else if x[i] 500 then col[i] = blue else if x[i] 750 then col[i] = green else col[i] = black for all i I am convinced that there is probably a very efficient way to do this in R but I am not able to figure it out. Any help would be greatly appreciated. Thanks in advance, Arend van der Veen __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
Re: [R] Vector Assignments
Arend - Here is a sequence of commands which will do it. These first build a vector of (4+1) cutpoints, then cut() returns a factor whose labels are the colors and codes are determined by x. Last, as.character() turns the factor into the character vector which you ask for. Or, perhaps the factor data structure is more useful directly. (Factors are sort of an acquired taste.) Note that in the call to cut, I am passing many arguments into the function by their position in the call. You will need to look at help(cut) to figure out which argument is which. Note also that by monkeying with the two logical arguments, (include.lowest and right), I didn't need to fudge any of the cutpoints. tmp - range(x) tmp - c(tmp[1], 250, 500, 750, tmp[2]) fac - cut(x, tmp, c(red,blue,green,black), TRUE, FALSE) col - as.character(fac) HTH - tom blackwell - u michigan medical school - ann arbor - On Mon, 1 Dec 2003, Arend P. van der Veen wrote: Hi, I have simple R question. I have a vector x that contains real numbers. I would like to create another vector col that is the same length of x such that: if x[i] 250 then col[i] = red else if x[i] 500 then col[i] = blue else if x[i] 750 then col[i] = green else col[i] = black for all i I am convinced that there is probably a very efficient way to do this in R but I am not able to figure it out. Any help would be greatly appreciated. Thanks in advance, Arend van der Veen __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
Re: [R] Vector Assignments
Just some small refinements/corrections: colours - c(red, blue, green,back) colours[cut(x, c(-Inf,250,500,700,Inf),right=F,lab=F)] --- Date: Tue, 02 Dec 2003 14:38:55 +1300 From: Hadley Wickham [EMAIL PROTECTED] To: Arend P. van der Veen [EMAIL PROTECTED] Cc: R HELP [EMAIL PROTECTED] Subject: Re: [R] Vector Assignments One way would be to create a vector of colours and then cut() to index the vector: colours - c(red, blue, green,back) colours[cut(x, c(min(x),250,500,700,max(x)),lab=F)] Hadley Arend P. van der Veen wrote: Hi, I have simple R question. I have a vector x that contains real numbers. I would like to create another vector col that is the same length of x such that: if x[i] 250 then col[i] = red else if x[i] 500 then col[i] = blue else if x[i] 750 then col[i] = green else col[i] = black for all i I am convinced that there is probably a very efficient way to do this in R but I am not able to figure it out. Any help would be greatly appreciated. Thanks in advance, Arend van der Veen __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
Re: [R] Vector Assignments
And one other thing. Are you sure you want character variables as the result of all this? A column whose entries are each one of four colors seems like a good job for a factor: colours - c(red, blue, green,black) cut(x, c(-Inf,250,500,700,Inf),right=F,lab=colours) --- Date: Mon, 1 Dec 2003 23:47:39 -0500 (EST) From: Gabor Grothendieck [EMAIL PROTECTED] To: [EMAIL PROTECTED], [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: [R] Vector Assignments Just some small refinements/corrections: colours - c(red, blue, green,back) colours[cut(x, c(-Inf,250,500,700,Inf),right=F,lab=F)] --- Date: Tue, 02 Dec 2003 14:38:55 +1300 From: Hadley Wickham [EMAIL PROTECTED] To: Arend P. van der Veen [EMAIL PROTECTED] Cc: R HELP [EMAIL PROTECTED] Subject: Re: [R] Vector Assignments One way would be to create a vector of colours and then cut() to index the vector: colours - c(red, blue, green,back) colours[cut(x, c(min(x),250,500,700,max(x)),lab=F)] Hadley Arend P. van der Veen wrote: Hi, I have simple R question. I have a vector x that contains real numbers. I would like to create another vector col that is the same length of x such that: if x[i] 250 then col[i] = red else if x[i] 500 then col[i] = blue else if x[i] 750 then col[i] = green else col[i] = black for all i I am convinced that there is probably a very efficient way to do this in R but I am not able to figure it out. Any help would be greatly appreciated. Thanks in advance, Arend van der Veen __ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help