[R] strsplit and regex

Erik Iverson iverson at biostat.wisc.edu
Thu Oct 16 00:23:11 CEST 2008


Matthew -

Redding, Matthew 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"

Why not simply,

strsplit(tst, ":")

at which point you can subscript to what you want?

To apply to a length n vector

tst2 <- c("23:10:34", "12:08:04", "1:02:03")

strsplit(tst2, ":")

And to extract the second item of each element of the resulting list,

sapply(strsplit(tst2, ":"), "[", 2)

Does this help?

Erik

> 
> 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:15}}
> 
> ______________________________________________
> 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