On Fri, 2004-03-12 at 19:37, Yong Wang wrote: > hi,all > a quick question: > > a vector > > v<-c(g,r,y,g,y,y,r) > > needs to be > > v<-c(1,2,3,1,3,3,2) > > i.e., replace g,r,y as 1,2,3
A couple of options and probably more: 1. Using a loop and a quick function I wrote called "gsr" (for Global Search and Replace): gsr <- function(Source, Search, Replace) { for (i in 1:length(Search)) { Source <- replace(Source, Source == Search[i], Replace[i]) } Source } v <- c("g", "r", "y", "g", "y", "y", "r") gsr(v, c("g", "r", "y"), 1:3) [1] "1" "2" "3" "1" "3" "3" "2" Note the above returns character values, so if you want numerics: > as.numeric(gsr(v, c("g", "r", "y"), 1:3)) [1] 1 2 3 1 3 3 2 Also, in the above function, you would want to be sure that both Search and Replace are vectors of equal length and could add some error checking code for that prior to the for() loop: if (length(Search) != length(Replace)) stop("Search and Replace Must Have Equal Number of Items\n") 2. Using a "trick" with unclass() and factor(): > as.vector(unclass(factor(v, levels = c("g", "r", "y")))) [1] 1 2 3 1 3 3 2 > how to do that, by the way, what key words I should use to search for such > basic operation command? Strangely enough: help.search("replace") ;-) See ?replace for more info and there is also the grep family for complex search and replace operations based on regex. See ?grep. HTH, Marc Schwartz ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html