On Dec 10, 2007 6:52 PM, Gabor Grothendieck <[EMAIL PROTECTED]> wrote: > With this specific example this will work: > > as.numeric(factor(a)) > > If that is not the real case but its something else you could try any > of these which probably generalize better: > > (a == "A") + 2 * (a == "B") > 1 + (a == "B") > ifelse(a == "A", 1, 2)
Just in case this wasn't clear: > a<-rep(c("A","B"),50) > b<-rep(1,100) > c<-rep(2,100) > > b * (a == "A") + c * (a == "B") [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 [38] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 [75] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 > b + (c-b) * (a == "B") [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 [38] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 [75] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 > ifelse(a == "A", b, c) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 [38] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 [75] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 > > > > > On Dec 10, 2007 6:41 PM, Neil Stewart <[EMAIL PROTECTED]> 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@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. > > > ______________________________________________ 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.