[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