[R] convert delimited strings with ranges to numeric

Marc Schwartz marc_schwartz at me.com
Wed Aug 14 20:08:33 CEST 2013


On Aug 14, 2013, at 12:41 PM, Chris Stubben <stubben at lanl.gov> wrote:

> Is there an easy way to convert character strings with comma-separated numbers and ranges to a numeric vector?
> 
> x<-  "2,5-7,10,12-15"
> 
> [1]  2  5  6  7 10 12 13 14 15
> 
> Thanks,
> Chris
> 



There is a general admonishment to not use the idiom eval(parse(text = ...)) which has become a 'fortune', however in this case:

x <-  "2,5-7,10,12-15"

> eval(parse(text = paste("c(", gsub("\\-", ":", x), ")")))
[1]  2  5  6  7 10 12 13 14 15


The result of the inner use of gsub() is:

> gsub("\\-", ":", x)
[1] "2,5:7,10,12:15"


which converts the '-' to ':', which can then be parsed as a sequence operator. The paste() creates:

> paste("c(", gsub("\\-", ":", x), ")")
[1] "c( 2,5:7,10,12:15 )"


which can then be evaluated as a single vector.


Regards,

Marc Schwartz



More information about the R-help mailing list