[R] reexpr transform nonumeric values to numeric

PIKAL Petr petr.pikal at precheza.cz
Tue Aug 21 15:31:32 CEST 2012


Thanks

I new that gsub shall be involved somehow, but the key is to use backreference "-\\1".

Regards
Petr


> -----Original Message-----
> From: arun [mailto:smartpink111 at yahoo.com]
> Sent: Tuesday, August 21, 2012 2:51 PM
> To: PIKAL Petr
> Cc: R help
> Subject: Re: [R] reexpr transform nonumeric values to numeric
> 
> HI,
> Try this:
> as.numeric(gsub("^([0-9].[0-9]{1,4})-$","-\\1",temp))
> #or
> as.numeric(gsub("^([[:digit:]].[[:digit:]]{1,4})-$","-\\1",temp))
> #or
> as.numeric(gsub("^([[:digit:]]..*{1,4})-$","-\\1",temp))
> #or
> as.numeric(gsub("^(.*.[[:digit:]]{1,4})-$","-\\1",temp))
> A.K.
> 
> 
> 
> 
> ----- Original Message -----
> From: PIKAL Petr <petr.pikal at precheza.cz>
> To: r-help <r-help at stat.math.ethz.ch>
> Cc:
> Sent: Tuesday, August 21, 2012 6:16 AM
> Subject: [R] reexpr transform nonumeric values to numeric
> 
> Dear all
> 
> I have got this kind of data
> 
> temp <- structure(c(1L, 1L, 1L, 1L, 1L, 16L, 6L, 6L, 16L, 16L, 16L,
> 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 11L, 10L, 16L, 16L,
> 16L, 21L, 16L, 16L, 16L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 1L, 1L, 7L,
> 3L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 4L, 10L, 8L, 2L, 1L, 4L, 6L,
> 2L, 1L, 1L, 1L, 9L, 4L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 4L, 6L, 6L,
> 8L, 8L, 6L, 6L, 6L, 10L, 11L, 1L, 1L, 2L, 4L, 2L, 7L, 10L, 2L, 16L,
> 10L, 6L, 10L, 1L, 4L, 3L, 17L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 3L, 2L, 6L,
> 8L, 4L, 1L, 1L, 8L, 8L, 6L, 3L, 4L, 8L, 6L, 4L, 2L, 6L, 2L, 4L, 6L, 4L,
> 4L, 2L, 6L, 4L, 2L, 3L, 4L, 6L, 8L, 8L, 10L, 6L, 4L, 10L, 4L, 4L, 4L,
> 2L, 4L, 4L, 2L, 8L, 10L, 11L, 11L, 10L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L,
> 1L, 1L, 13L, 13L, 14L, 8L, 3L, 5L, 3L, 3L, 1L, 1L, 1L, 1L, 4L, 1L, 12L,
> 16L, 26L, 16L, 1L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 14L,
> 15L, 15L, 18L, 23L, 20L, 17L, 20L, 19L, 24L, 24L, 24L, 23L, 20L, 17L,
> 17L, 17L, 27L, 17L, 17L, 22L, 17L, 17L, 24L, 22L, 22L, 19L, 23L, 23L,
> 25L, 5L, 28L), .Label = c("0.0000", "0.0100", "0.0100-", "0.0200",
> "0.0200-", "0.0300", "0.0300-", "0.0400", "0.0400-", "0.0500",
> "0.0600", "0.0600-", "0.0700", "0.0800", "0.0900", "0.1000", "0.1000-",
> "0.1100", "0.1100-", "0.1200-", "0.1300", "0.1300-", "0.1400-",
> "0.1500-", "0.1800-", "0.2000", "0.2000-", "0.4000-"), class =
> "factor")
> 
> As you can see, negative values have minus sign at the end of value
> (strange but sometimes used).
> 
> I can find those values by
> grep("-",levels(temp)) and manipulate it to strip "-" sign, put "-"sign
> before the value by paste and change it to numeric as.numeric(paste("-
> ", gsub("-", "", levels(temp)[grep("-",levels(temp))]), sep=""))
> 
> but Is there any kind of possible regular expression to do it in one
> step? E.g. I would like to end with some function which can take whole
> vector temp and change it to numeric.
> 
> Something like
> 
> as.numeric(gsub("some clever regular expression", temp))
> 
> Thank you
> Petr
> 
> ______________________________________________
> 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