[R] Convert character string to number
Hans-Jörg Bibiko
bibiko at eva.mpg.de
Sat Jun 21 18:37:51 CEST 2008
On 21.06.2008, at 17:25, Marc Schwartz wrote:
> on 06/21/2008 09:18 AM Gabor Grothendieck wrote:
>> On Sat, Jun 21, 2008 at 8:31 AM, Wacek Kusnierczyk
>> <Waclaw.Marcin.Kusnierczyk at idi.ntnu.no> wrote:
>>> Hans-Jörg Bibiko wrote:
>>>> On 21.06.2008, at 01:36, Ken Liu wrote:
>>>>> I would like to convert a character vector
>>>>> xxx <- c("1/2", "1/4")
>>>>> to
>>>>> yyy <- c(0.5, 0.25)
>>>>>
>>>> as.numeric( gsub("(\\d+)/(\\d+)", "\\1", xxx, perl=T) ) /
>>>> as.numeric(
>>>> gsub("(\\d+)/(\\d+)", "\\2", xxx, perl=T) )
>>> or:
>>>
>>> library(gsubfn)
>>> as.numeric(
>>> gsubfn("([0-9]+)/([0-9]+)",
>>> numerator+denominator~as.numeric(numerator)/as.numeric
>>> (denominator),
>>> xxx, backref=-2)
>>> )
>> strapply, also in the gsubfn package, could be used here in a
>> similar way too:
>>> library(gsubfn)
>>> strapply(xxx, "([0-9]+)/([0-9]+)", ~ as.numeric(x) / as.numeric
>>> (y), backref = -2, simplify = c)
>> [1] 0.50 0.25
>> or
>>> fn$sapply(strapply(xxx, "[0-9]+", as.numeric), ~ x[1]/x[2])
>> [1] 0.50 0.25
>
> I may have missed this one in the thread someplace, but I did not
> note any solutions based upon using strsplit(). So:
>
> > sapply(strsplit(xxx, split = "/"),
> function(x) as.numeric(x[1]) / as.numeric(x[2]))
> [1] 0.50 0.25
> or
> > apply(sapply(strsplit(xxx, split = "/"), as.numeric),
> 2, function(x) x[1] / x[2])
> [1] 0.50 0.25
OK. Here is an other one:
* for UNIX/Mac and it's meant funnily [to rest R ;) ]
sapply(as.list(xxx),
function(x) as.numeric(system(paste("echo 'scale=10;",x,"'|
bc",sep=''), intern=T)))
--Hans
More information about the R-help
mailing list