Skip to content

Faster way to do it??...using apply?

5 messages · M.Ribeiro, Henrique Dallazuanna, Jonathan P Daily

#
Hi, 
I have a simple task, but I am looking for a clever and fast way to do it:

I have a vector x with 0,1 or 2 and I want to create another vector y with
the same length following the rules:
If the element in x is equal to 0, the element in y is equal to 0
If the element in x is equal to 2, the element in y is equal to 1
If the element in x is equal to 1, the element in y is either 0 or 1 (sample
from c(0,1))

thus the vector
[,1]
[1,]    0
[2,]    2
[3,]    1
[4,]    2
[5,]    0
[6,]    1
[7,]    2

could produce the vector y (this is one of the possibilities since y|x=1 is
either 0 or 1
[,1]
[1,]    0
[2,]    1
[3,]    1
[4,]    1
[5,]    0
[6,]    0
[7,]    1


I know how to do this using for loops but I was wondering if you guys could
suggest a better way
Thanks
#
Hi Henrique,
Thanks for the fast answer,
The only problem in your code, which I think I didn't mention in my message
is that I would like one different random sampling procedure for each 1 in
my vector

The way it was written, it samples only once and replace by every 1:
[,1]
 [1,]    1
 [2,]    1
 [3,]    1
 [4,]    1
 [5,]    1
 [6,]    1
 [7,]    1
 [8,]    1
 [9,]    1
[10,]    1
[11,]    1
[12,]    1
[13,]    1
[14,]    1
[15,]    1

Thanks
#
I don't know if it's any faster, but it is also possible this way:

y <- ifelse(x ==1, round(runif(x)), sign(x))
--------------------------------------
Jonathan P. Daily
Technician - USGS Leetown Science Center
11649 Leetown Road
Kearneysville WV, 25430
(304) 724-4480
"Is the room still a room when its empty? Does the room,
 the thing itself have purpose? Or do we, what's the word... imbue it."
     - Jubal Early, Firefly

r-help-bounces at r-project.org wrote on 12/28/2010 12:48:04 PM:
2, 1)
wrote:
message
1 in
http://www.R-project.org/posting-guide.html