[R] replace character by numeric value

Ebert,Timothy Aaron tebert @end|ng |rom u||@edu
Fri Sep 29 15:21:50 CEST 2023


Does this work?
mynewdf$side <- as.numeric(mynewdf$side)

This code would be the next line after your mutate.

TIm

-----Original Message-----
From: R-help <r-help-bounces using r-project.org> On Behalf Of Enrico Schumann
Sent: Thursday, September 28, 2023 3:13 AM
To: arnaud gaboury <arnaud.gaboury using gmail.com>
Cc: r-help <r-help using r-project.org>
Subject: Re: [R] replace character by numeric value

[External Email]

On Wed, 27 Sep 2023, arnaud gaboury writes:

> I have two data.frames:
>
> mydf1 <- structure(list(symbol = "ETHUSDT", cummulative_quote_qty =
> 1999.9122, side = "BUY", time = structure(1695656875.805, tzone = "",
> class = c("POSIXct", "POSIXt"))), row.names = c(NA, -1L), class =
> c("data.table",
> "data.frame"))
>
> mydf2 <- structure(list(symbol = c("ETHUSDT", "ETHUSDT", "ETHUSDT"),
> cummulative_quote_qty = c(1999.119408, 0, 2999.890985), side =
> c("SELL", "BUY", "BUY"), time = structure(c(1695712848.487,
> 1695744226.993, 1695744509.082), class = c("POSIXct", "POSIXt"
> ), tzone = "")), row.names = c(NA, -3L), class = c("data.table",
> "data.frame"))
>
> I use this line to replace 'BUY' by numeric 1 and 'SELL' by numeric -1
> in
> mydf1 and mydf2:
> mynewdf <- mydf |> dplyr::mutate(side = ifelse(side == 'BUY', 1,
> ifelse(side == 'SELL', -1, side)))
>
> This does the job but I am left with an issue: 1 and -1 are characters
> for
> mynewdf2 when it is numeric for mynewdf1. The result I am expecting is
> getting numeric values.
> I can't solve this issue (using as.numeric(1) doesn't work) and don't
> understand why I am left with num for mynewdf1 and characters for mynewdf2.
>
>> mynewdf1 <- mydf1 |> dplyr::mutate(side = ifelse(side == 'BUY', 1,
> ifelse(side == 'SELL', -1, side)))
>> str(mynewdf1)
> Classes 'data.table' and 'data.frame': 1 obs. of  4 variables:
>  $ symbol               : chr "ETHUSDT"
>  $ cummulative_quote_qty: num 2000
>  $ side                 : num 1      <<<------
>  $ time                 : POSIXct, format: "2023-09-25 17:47:55"
>  - attr(*, ".internal.selfref")=<externalptr>
>
>> mynewdf2 <- mydf2 |> dplyr::mutate(side = ifelse(side == 'BUY', 1,
> ifelse(side == 'SELL', -1, side)))
>>  str(mynewdf2)
> Classes 'data.table' and 'data.frame': 3 obs. of  4 variables:
>  $ symbol               : chr  "ETHUSDT" "ETHUSDT" "ETHUSDT"
>  $ cummulative_quote_qty: num  1999 0 3000
>  $ side                 : chr  "-1" "1" "1"   <<<------
>  $ time                 : POSIXct, format: "2023-09-26 09:20:48"
> "2023-09-26 18:03:46" "2023-09-26 18:08:29"
>  - attr(*, ".internal.selfref")=<externalptr>
>
> Thank you for help
>

I'd use something like this:

    map <- c(BUY = 1, SELL = -1)
    mydf1$side <- map[mydf1$side]
    str(mydf1)
    ## Classes 'data.table' and 'data.frame':   1 obs. of  4 variables:
    ##  $ symbol               : chr "ETHUSDT"
    ##  $ cummulative_quote_qty: num 2000
    ##  $ side                 : num 1

    mydf2$side <- map[mydf2$side]
    str(mydf2)
    ## Classes 'data.table' and 'data.frame':   3 obs. of  4 variables:
    ##  $ symbol               : chr  "ETHUSDT" "ETHUSDT" "ETHUSDT"
    ##  $ cummulative_quote_qty: num  1999 0 3000
    ##  $ side                 : num  -1 1 1
    ##  $ time                 : POSIXct, format: "2023-09-26 09:20:48" ...



--
Enrico Schumann
Lucerne, Switzerland
http://enricoschumann.net/

______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
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