[R] lapply, strsplit, and list elements
Greg Snow
Greg.Snow at imail.org
Fri Feb 4 21:41:20 CET 2011
Darn, Good catch, I fell victim to overthinking the problem.
I think I was more thinking of:
'[0-9]+(?=/)'
Which uses the whole match (then I switched thinking and captured the number, but did not simplify the other part). Yours is the best.
--
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111
> -----Original Message-----
> From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> Sent: Friday, February 04, 2011 12:22 PM
> To: Greg Snow
> Cc: Dick Harray; r-help at r-project.org
> Subject: Re: [R] lapply, strsplit, and list elements
>
> On Fri, Feb 4, 2011 at 1:27 PM, Greg Snow <Greg.Snow at imail.org> wrote:
> > Try this:
> >
> >> x <- c("349/077,349/074,349/100,349/117",
> > + "340/384.2,340/513,367/139,455/128,D13/168",
> > + "600/437,128/903,128/904")
> >>
> >> library(gsubfn)
> >> out <- strapply(x, '([0-9]+)(?=/)')
> >> out
> > [[1]]
> > [1] "349" "349" "349" "349"
> >
> > [[2]]
> > [1] "340" "340" "367" "455" "13"
> >
> > [[3]]
> > [1] "600" "128" "128"
> >
> >
> > The strapply looks for the pattern then returns every time it finds
> the pattern. The pattern in this case is 1 or more digits that are
> followed by a /, but the slash is not included in the matched portion
> (a positive look ahead).
> >
> > If you need more than digits you can modify the pattern to whatever
> matches before the /.
>
> Also this similar approach with a slight simplification of the regular
> expression:
>
> strapply(x, '([0-9]+)/')
>
> or to convert the numbers to numeric at the same time:
>
> strapply(x, '([0-9]+)/', as.numeric)
>
>
> --
> 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