[R] String position character replacement

Gabor Grothendieck ggrothendieck at gmail.com
Wed Feb 8 20:06:52 CET 2012


On Wed, Feb 8, 2012 at 12:33 PM, Yang, Joy (NIH/NHGRI) [F]
<joy.yang at nih.gov> wrote:
> Hi,
>
> Is there a way to efficiently replace specified indices in a string with another character? For example, if I had a vector of strings such as
>
> [1] "hellohowareyoudoing"
> [2] "imgoodhowareyou"
> [3] "goodandyou"
> [4] "yesimgoodijusttoldyou"
> [5] "ohyesthatsright"
>
> and had a list of positions that I want to replace with the character "-"
>
> [[1]]
> [1]  3  9
>
> [[2]]
> [1]  3  4
>
> [[3]]
> [1]  4  7
>
> [[4]]
> [1] 5 6 7 8 9
>
> [[5]]
> [1]  2  5  7 12
>
> I would like to get
>
> [1] "he-lohow-reyoudoing"
> [2] "im--odhowareyou"
> [3] "goo-an-you"
> [4] "yesi-----ijusttoldyou"
> [5] "o-ye-t-atsr-ght"
>
> Is there an easy way to do this? Or would the easiest way be writing a function to take substrings of the original vector and pasting in the replacement character?
>

Using this input:

pos <- list(c(3, 9), c(3, 4))
s <- c("hellohowareyoudoing", "imgoodhowareyou")

we can use regmatches like this where the lapply on the LHS constructs
a matches list and the lapply on the RHS constructs a list of "-"
characters:

f <- function(p) structure(p, match.length = rep(1, length(p)))
regmatches(s, lapply(pos, f)) <- lapply(pos, function(p) "-")

The resulting s is:

> s
[1] "he-lohow-reyoudoing" "im--odhowareyou"

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list