[R] lapply, strsplit, and list elements

Gabor Grothendieck ggrothendieck at gmail.com
Fri Feb 4 20:22:28 CET 2011


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