Does this do what you want: > x <- c('xxxredxxx', 'xxxxbluexxxx', 'xxxxxx', 'greenbluered') > pat <- 'red|green|blue' > result <- sub(paste("^.*?(", pat, ").*", sep=""), "\\1", x) > # check if no match in original string; replace with 'other' > match <- grep(pat, x) > result[-match] <- 'other' > result [1] "red" "blue" "other" "red" > >
On Sat, Mar 28, 2009 at 1:08 PM, Stephan Kolassa <stephan.kola...@gmx.de> wrote: > Hi Simeon, > > I played around a little with Vectorize and mapply, but I couldn't make it > work :-( So, my best guess would be a simple loop like this: > > result <- as.character(paste(letters,colours(),"stuff",LETTERS)) > target <- c("red","blue","green","gray") > for ( new.color in target ) { result[grep(new.color,result)] <- new.color } > > Best of luck, > Stephan > > > simeon duckworth schrieb: >> >> stephan >> >> sorry for not being clear - but thats exactly what i want. >> >> i'd like to replace every complex string that contains "red" with just >> "red", and then so on with "blue", "yellow" etc >> >> my data is of the form >> >> "xxxxx xx xx xxxxx red xx xxx xx" >> "xx xxx xxx xx blue xx xx xx xx x" >> "x xx xxxxxxxx xx xx xx xxxx red" >> "red xx xx xx xx xx" >> "xx xx xx xx xx xx" >> "xx x x x x xxxx" >> >> which i'd like to replace with >> "red" >> "blue" >> "red" >> "other" >> "other" >> >> thanks >> >> >> On Sat, Mar 28, 2009 at 2:38 PM, Stephan Kolassa >> <stephan.kola...@gmx.de>wrote: >> >>> Hi Simeon, >>> >>> I'm slightly unclear on what exactly you are trying to achieve... Are you >>> trying to replace every entry of colours which *contains* "red" by "red", >>> dropping the rest of the entry? And same with "blue"? >>> >>> A short example "before & after" would be helpful... >>> >>> Best, >>> Stephan >>> >>> >>> simeon duckworth schrieb: >>> >>> thanks stephan. i'd been trying to make gsub work, but couldnt make it >>>> >>>> replace the whole expression. so i'd resorted to trying to loop with >>>> grep >>>> - >>>> but with two problems. firstly, i cant seem to make the loop >>>> 'remember' >>>> the substitutions it makes (see below). secondly, it feels like this is >>>> a >>>> really inefficient way of doing something quite simple anyhow. >>>> >>>> colours <- as.character(paste(letters,colours(),"stuff",LETTERS)) >>>> target <- c("red","blue","green","gray") >>>> new.colour <-colours >>>> for (i in length(target)) { >>>> x <- target[i] >>>> new.colour[grep((x),new.colour)] <- x >>>> return(new.colour) >>>> } >>>> >>>> >>>> >>>> >>>> On Sat, Mar 28, 2009 at 9:45 AM, Stephan Kolassa <stephan.kola...@gmx.de >>>>> >>>>> wrote: >>>> >>>> Hi Simeon, >>>>> >>>>> ?gsub >>>>> >>>>> HTH, >>>>> Stephan >>>>> >>>>> simeon duckworth schrieb: >>>>> >>>>> I am trying to simplify a text variable by matching and replacing it >>>>>> >>>>>> with >>>>>> a >>>>>> string in another vector >>>>>> >>>>>> so for example in >>>>>> colours <- paste(letters,colours(),"stuff",LETTERS) >>>>>> >>>>>> find and replace with ("red","blue","green","gray","yellow","other") >>>>>> - >>>>>> irrespective of case >>>>>> >>>>>> its a large dataset, so i'd like to be able to do this as efficiently >>>>>> as >>>>>> possible. >>>>>> >>>>>> thanks for any help >>>>>> >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> ______________________________________________ >>>>>> 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? ______________________________________________ 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.