[R] format negative numbers

David Winsemius dwinsemius at comcast.net
Mon Oct 20 23:04:13 CEST 2014


On Oct 20, 2014, at 4:32 AM, PIKAL Petr wrote:

> Hi
> 
> Thanks to all who responded.
> 
> My input string is rather clumsy. Actually it can have leading or trailing empty space too, it can be mixture of positive and negative numbers.
> 
> In the meantime I made small function which just strips of - sign and make numbers from factors, find numbers which have - sign and change numbers which shall be negative to negative. Not as elegant as your solution but works even when there are leading or trailing spaces.
> 
> zapor <- function(x) {
> num<-as.numeric(gsub("(-)", "", x))

Might want to just use sub() since your method would accept things like "-----100----"

> zap<- grep("-", x)
> num[zap]<- num[zap] * (-1)
> num}
> 
>> x <- as.factor( c("   123.4-   " , "   123   "))
>> zapor(x)
> [1] -123.4  123.0
>> 

gsub("^(\\s+)([0-9.]+)(-){0,1}(\\s)+$", "\\3\\2",
                as.factor( c("   123.4-   " , "   123   ") ) )
[1] "-123.4" "123"  

Then just `as.numeric`. You method looks more elegant. Depending on the local you may get into trouble with variation in decimal markers.


> 
> I just thought that there is some reason for presenting negative numbers with minus sign behind the number in finance community and therefore somebody already invented clever way how to deal with such numbers.
> 
> Cheers
> Petr
> 
> 
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>> project.org] On Behalf Of Marc Girondot
>> Sent: Monday, October 20, 2014 12:53 PM
>> To: r-help at r-project.org
>> Subject: Re: [R] format negative numbers
>> 
>> Is it what you want?
>> 
>>> st <- "0.123-"
>>> gsub("(.+)(-)", "\\2\\1", st)
>> [1] "-0.123"
>>> st <- "0.123"
>>> gsub("(.+)(-)", "\\2\\1", st)
>> [1] "0.123"
>> 
>> Sincerely
>> Marc
>> 
>> Le 20/10/2014 09:03, PIKAL Petr a écrit :
>>> Dear all.
>>> 
>>> Before I start fishing in (for me) murky regular expression waters I
>> try to ask community about changing format of negative numbers.
>>> 
>>> For some reason I get a file with negative numbers formatted with
>> negative sign at end of number.
>>> 
>>> something like
>>> 
>>> 0.123-
>>> 
>>> It is imported as factors and I need to convert it to numbers again.
>> Before converting I need to change it to "correct" format
>>> 
>>> -0.123
>>> 
>>> Does anybody know some simple way?
>>> 
>>> Cheers
>>> Petr
>>> 
>>> 
>>> ________________________________
>>> Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a
>> 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list