[R] strsplit and regex

Redding, Matthew Matthew.Redding at dpi.qld.gov.au
Thu Oct 16 00:55:33 CEST 2008


Hi All, 

Thanks for all these great efficient solutions.

Another one in the mix that Phil S.
sent on to me:
sapply(strsplit(tst,":"),function(x)x[2])

Matt

>-----Original Message-----
>From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com] 
>Sent: Thursday, 16 October 2008 8:38 AM
>To: Redding, Matthew
>Cc: r-help at r-project.org
>Subject: Re: [R] strsplit and regex
>
>Here are several solutions:
>
>#1
># replace first three and last 3 characters with nothing x <- 
>c("23:10:34", "01:02:03") gsub("^...|...$", "", x)
>
>#2
># backref = -1 says extract the portion in parens # it would 
>have returned a list so we use simplify = c
>library(gsubfn)
>strapply(x, ":(..):", backref = -1, simplify = c)
>
>#3
># convert to POSIXct and use POSIXct's format
>library(chron)
>format(as.POSIXct(as.chron(times(x))), "%M")
>
>#4
># chron times are fractions of a day
># this gives numeric result whereas others give character
>library(chron)
>floor(24 * 60 * as.numeric(times(x))) %% 60
>
>
>On Wed, Oct 15, 2008 at 5:54 PM, Redding, Matthew 
><Matthew.Redding at dpi.qld.gov.au> wrote:
>> Hi All,
>>
>> Is there a means to extract the "10" from "23:10:34" in one 
>pass using 
>> strsplit (or something else)?
>> tst <- "23:10:34"
>>
>> For example my attempt
>> strsplit(as.character(tst),"^[0-9]*:")
>> gives
>> [[1]]
>> [1] ""   ""   "34"
>>
>> Obviously it is matching the first two instances of [0-9]. Note that 
>> there may be only one digit before the first ":".
>>
>> How do I anchor the match to the begginning or better still, just 
>> extract the number I want in one pass?
>>
>> I can see that I can add "begin" to the beginning of the string, and 
>> match that and do something similar at the end, getting rid of empty 
>> strings etc - but I think it would take about 3 passess  - and the 
>> files are large. And besides that code would be unlovely.
>>
>> Kind regards,
>>
>>
>> Matt Redding
>> 
>********************************DISCLAIMER**************...{{dropped:1
>> 5}}
=0...{{dropped:19}}



More information about the R-help mailing list