[R] using (g)sub for efficient string handling (was Re: transforming one column into 2 columns)

Gabor Grothendieck ggrothendieck at gmail.com
Sat Feb 2 20:19:25 CET 2008


This does not answer your question directly but note that
strapply in the gsubfn package can be used to select strings
by content:

> library(gsubfn)
> (x <- strapply(txt, "Variation_....", simplify = c))
[1] "Variation_0001" "Variation_5452" "Variation_4192" "Variation_4193"
[5] "Variation_8246" "Variation_8246"
> paste(x, collapse = ";")
[1] "Variation_0001;Variation_5452;Variation_4192;Variation_4193;Variation_8246;Variation_8246"


On Feb 2, 2008 1:40 PM, Benilton Carvalho <bcarvalh at jhsph.edu> wrote:
> That actually reminds me of a problem I had to tackle a while ago.
>
> Say I have the following:
>
> txt <- c("Variation_0001 // chr1:1083805-1283805 // Array CGH //
> 15286789 // Iafrate et al. (2004) // CopyNumber /// Variation_5452 //
> chr1:1142956-1147823 // Computational mapping of resequencing
> traces // 16902084 // Mills et al. (2006) // CopyNumber",
> "Variation_4192 // chr1:2062347-2242269 // Array CGH // 17160897 //
> Wong et al. (2007) // CopyNumber /// Variation_4193 //
> chr1:2145626-2314237 // Array CGH // 17160897 // Wong et al. (2007) //
> CopyNumber /// Variation_8246 // chr1:2224111-3755284 // Affymetrix
> 500K and 100K SNP Mapping Arrays // 17638019 // Zogopoulos et al.
> (2007) // CopyNumber", "Variation_8246 // chr1:2224111-3755284 //
> Affymetrix 500K and 100K SNP Mapping Arrays // 17638019 // Zogopoulos
> et al. (2007) // CopyNumber")
>
> For each record, I'm interested in keeping the following:
>
> results <- c("Variation_0001;Variation_5452",
> "Variation_4192;Variation_4193;Variation_8246", "Variation_8246")
>
> My solution was:
>
> theNames <- function(tmp)
>   sapply(strsplit(tmp, " /+ "),
>          function(y)
>          paste(y[grep("Variation_", y)],
>                collapse=";"))
>
> But my wish was to know the regular expression that I needed to select
> everything but "Variation_\\d+"... For example, something like:
>
> gsub( NOT "Variation_\\d+", ";", txt, perl=TRUE)
>
> Suggestions?
>
> b
>
> On Feb 2, 2008, at 1:03 PM, Peter Dalgaard wrote:
>
> > Benilton Carvalho wrote:
> >> help("strsplit")
> >> b
> >>
> > Yes, but...
> >
> > The postprocessing gets a bit awkward. It might be easier to use
> > sub() to get rid of the first/last bit of the string i.e.
> >
> > C2 <- sub("^.*:", "",  Col)
> > C1 <- sub(":.*$", "",  Col)
> >
> > An orthogonal idea is
> >
> > con <- textConnection("Col")
> > read.table(con, sep=":")
> > close(con)
> >
> >> On Feb 2, 2008, at 12:43 PM, joseph wrote:
> >>
> >>>
> >>>
> >>> Hello
> >>>
> >>> I have a data frame and one of its columns is as follows:
> >>>
> >>>
> >>>
> >>>
> >>> Col
> >>>
> >>>
> >>> chr1:71310034
> >>>
> >>>
> >>>
> >>> chr15:37759058
> >>>
> >>>
> >>> chr22:18262638
> >>>
> >>>
> >>> chrUn:31337214
> >>>
> >>>
> >>> chr10_random:4369261
> >>>
> >>>
> >>> chrUn:3545097
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> I would like to get rid of colon (:) and replace this column
> >>> with two new columns containing the terms on each side of the
> >>> colon. The new columns
> >>> should look as follows:
> >>>
> >>>
> >>>
> >>>
> >>> Col_a   Col_b
> >>>
> >>>
> >>> chr1     71310034
> >>>
> >>>
> >>> chr14   23354088
> >>>
> >>>
> >>> chr15   37759058
> >>>
> >>>
> >>> chr22   18262638
> >>>
> >>>
> >>> chrUn   31337214
> >>>
> >>>
> >>> chr10_random  4369261
> >>>
> >>>
> >>> chrUn   3545097
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> Any help will be much appreciated
> >>>
> >>>
> >>> Joseph
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> ____________________________________________________________________________________
> >>> Looking for last minute shopping deals?
> >>>
> >>>    [[alternative HTML version deleted]]
> >>>
> >>> ______________________________________________
> >>> 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.
> >>
> >> ------------------------------------------------------------------------
> >>
> >> ______________________________________________
> >> 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.
> >>
> >
> >
> > --
> >  O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
> > c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
> > (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45)
> > 35327918
> > ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45)
> > 35327907
> >
>
>
> ______________________________________________
> 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.
>
>



More information about the R-help mailing list