Re: [R] Neat conditional assignment

From: jim holtman <jholtman_at_gmail.com>
Date: Mon, 10 Dec 2007 15:46:06 -0800

?ifelse

> a<-rep(c("A","B"),50)
> b<-rep(1,100)
> c<-rep(2,100)
> d <- ifelse(a == "A", b, c)
> head(d)
[1] 1 2 1 2 1 2

On Dec 10, 2007 3:41 PM, Neil Stewart <neil.stewart_at_warwick.ac.uk> wrote:
> I would like to make a new vector with values taken from two existing
> vectors conditional upon a third. At present I am doing this with a for loop
> but wonder if there is not a neater way, given some of the very neat things
> R can do.
>
> a<-rep(c("A","B"),50)
> b<-rep(1,100)
> c<-rep(2,100)
>
> a is thus "A" "B" "A" "B" "A" "B"...
> b is thus 1 1 1 1 1 1 ...
> c is thus 2 2 2 2 2 2 ...
>
> I want d[i] to be b[i] if a[i]=="A" and c[i] if a[i]=="B". I'm current using
> a for loop:
>
> d<-rep(0,100) # initialise d
> for(i in 1:length(a)) {if(a[i]=="A") d[i]<-b[i] else d[i]<-c[i]}
>
> d is thus 1 2 1 2 1 2 1 2 1 ...
>
> Is it possible to do something simpler, say along the lines of the c-style
> ?: conditional statement, or at least avoiding the for loop.
>
> d <- a=="A"?b:c # doesn't work, but you get the idea
>
> Thanks in advance,
> Neil
>
> ______________________________________________
> R-help_at_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.
>

-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?

______________________________________________
R-help_at_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.
Received on Tue 11 Dec 2007 - 00:04:11 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 11 Dec 2007 - 00:30:18 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.