Arthur Wuster
2007-Aug-28 14:12 UTC
[R] substituting elements in vector according to sample(unique(vector))
Hello! Assuming I have a vector, such as v <- c(1,2,1,2,3,3,1) This vector has three unique elements: 1, 2, and 3.> unique(v)[1] 1 2 3 If I shuffle this vector of unique elements, I get something like this:> sample(unique(v))[1] 3 2 1 In the vector v I started with, I would now like to replace each element in unique(v) with the corresponding element (i.e. the element with the same index) in sample(unique(v)). In this case, the result should be something like c(3,2,3,2,1,1,3). In particular, I would like to do this without a slow for loop. I have tried things like sub(), but they don't seem to be appropriate. Can anyone provide an elegant solution? Thank you, Arthur Wuster Theoretical and Computational Biology MRC Laboratory of Molecular Biology Cambridge, UK
Dimitris Rizopoulos
2007-Aug-29 07:20 UTC
[R] substituting elements in vector according tosample(unique(vector))
try the following: v <- c(1, 2, 1, 2, 3, 3, 1) x <- c(3, 2, 1) fv <- factor(v, levels = x) as.vector(unclass(fv)) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Ph.D. Student Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Arthur Wuster" <awuster at mrc-lmb.cam.ac.uk> To: <r-help at stat.math.ethz.ch> Sent: Tuesday, August 28, 2007 4:12 PM Subject: [R] substituting elements in vector according tosample(unique(vector))> > Hello! > > Assuming I have a vector, such as > > v <- c(1,2,1,2,3,3,1) > > This vector has three unique elements: 1, 2, and 3. > >> unique(v) > [1] 1 2 3 > > If I shuffle this vector of unique elements, I get something like > this: > >> sample(unique(v)) > [1] 3 2 1 > > In the vector v I started with, I would now like to replace each > element in > unique(v) with the corresponding element (i.e. the element with the > same > index) in sample(unique(v)). > > In this case, the result should be something like c(3,2,3,2,1,1,3). > > In particular, I would like to do this without a slow for loop. > I have tried things like sub(), but they don't seem to be > appropriate. > Can anyone provide an elegant solution? > > Thank you, > > Arthur Wuster > Theoretical and Computational Biology > MRC Laboratory of Molecular Biology > Cambridge, UK > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm