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 at r-project.org> On Behalf Of Enrico
Schumann
Sent: Thursday, September 28, 2023 3:13 AM
To: arnaud gaboury <arnaud.gaboury at gmail.com>
Cc: r-help <r-help at 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 at 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.