Marianne Promberger
2010-Feb-22 16:25 UTC
[R] gsub patterns from vector elements w/out loop?
Dear list,
I have two vectors:
x <- c("one","two")
y <- paste(rep(x,2),"blah")
I want to replace all occurrences of each element of x in y with
something else, so that y looks like this:
y
[1] "something else blah" "something else blah"
"something else blah"
[4] "something else blah"
I can do this using a loop:
for ( i in 1:length(x) ) {
y <- gsub(x[i],"something else",y)
}
Surely, there must be a less kludgy way?
I tried looking at the different apply()s but am not getting anywhere,
partly because I lack the mental flexibility to combine the fact that
I am applying gsub() to y but now want to apply that to x ... erm. :/
Marianne
--
Marianne Promberger PhD, King's College London
http://promberger.info
R version 2.10.1 (2009-12-14)
Ubuntu 9.10
Benilton Carvalho
2010-Feb-22 16:48 UTC
[R] gsub patterns from vector elements w/out loop?
gsub("one|two", "something else", y)
?
On Mon, Feb 22, 2010 at 4:25 PM, Marianne Promberger
<marianne.promberger at kcl.ac.uk> wrote:> Dear list,
>
> I have two vectors:
>
> x <- c("one","two")
> y <- paste(rep(x,2),"blah")
>
> I want to replace all occurrences of each element of x in y with
> something else, so that y looks like this:
>
> y
> [1] "something else blah" "something else blah"
"something else blah"
> [4] "something else blah"
>
> I can do this using a loop:
>
> for ( i in 1:length(x) ) {
> ?y <- gsub(x[i],"something else",y)
> }
>
> Surely, there must be a less kludgy way?
>
> I tried looking at the different apply()s but am not getting anywhere,
> partly because I lack the mental flexibility to combine the fact that
> I am applying gsub() to y but now want to apply that to x ... ?erm. :/
>
> Marianne
>
> --
> Marianne Promberger PhD, King's College London
> http://promberger.info
> R version 2.10.1 (2009-12-14)
> Ubuntu 9.10
>
> ______________________________________________
> 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.
>
On Feb 22, 2010, at 10:25 AM, Marianne Promberger wrote:> Dear list, > > I have two vectors: > > x <- c("one","two") > y <- paste(rep(x,2),"blah") > > I want to replace all occurrences of each element of x in y with > something else, so that y looks like this: > > y > [1] "something else blah" "something else blah" "something else blah" > [4] "something else blah" > > I can do this using a loop: > > for ( i in 1:length(x) ) { > y <- gsub(x[i],"something else",y) > } > > Surely, there must be a less kludgy way? > > I tried looking at the different apply()s but am not getting anywhere, > partly because I lack the mental flexibility to combine the fact that > I am applying gsub() to y but now want to apply that to x ... erm. :/ > > MarianneYou can use "|" to specify a logical "or" in the search regex:> gsub("one|two", "something else", y)[1] "something else blah" "something else blah" "something else blah" [4] "something else blah" Thus:> paste(x, collapse = "|")[1] "one|two" and finally:> gsub(paste(x, collapse = "|"), "something else", y)[1] "something else blah" "something else blah" "something else blah" [4] "something else blah" See ?regex and ?paste HTH, Marc Schwartz
Christian Raschke
2010-Feb-22 18:20 UTC
[R] gsub patterns from vector elements w/out loop?
Marianne,
The function substring2 from the Hmisc packages works nicely for me to
do this (without explicit gsub, though):
x<- c("one","two")
y<- paste(rep(x,2),"blah")
y
[1] "one blah" "two blah" "one blah" "two
blah"
substring2(y,x)<- "something else"
y
[1] "something else blah" "something else blah"
"something else blah" "something else blah"
Christian
On 02/22/2010 10:25 AM, Marianne Promberger wrote:> Dear list,
>
> I have two vectors:
>
> x<- c("one","two")
> y<- paste(rep(x,2),"blah")
>
> I want to replace all occurrences of each element of x in y with
> something else, so that y looks like this:
>
> y
> [1] "something else blah" "something else blah"
"something else blah"
> [4] "something else blah"
>
> I can do this using a loop:
>
> for ( i in 1:length(x) ) {
> y<- gsub(x[i],"something else",y)
> }
>
> Surely, there must be a less kludgy way?
>
> I tried looking at the different apply()s but am not getting anywhere,
> partly because I lack the mental flexibility to combine the fact that
> I am applying gsub() to y but now want to apply that to x ... erm. :/
>
> Marianne
>
>
--
Christian Raschke
Department of Economics
and
ISDS Research Lab (HSRG)
Louisiana State University
Patrick Taylor Hall, Rm 2128
Baton Rouge, LA 70803
(225)226-0017
crasch2 at lsu.edu