Re: [R] replace character by numeric value

2023-09-29 Thread Ebert,Timothy Aaron
You might also try
mynewdf <- mydf |> dplyr::mutate(side = ifelse(side == 'BUY', 1,-1))

This may give unexpected results if there are other choices besides "BUY" and 
"SELL".

mynewdf <- mydf |> dplyr::mutate(side = ifelse(side == 'BUY', 1, ifelse(side == 
'SELL', -1, NA)))

is an option that would take care of other options.



-Original Message-
From: R-help  On Behalf Of Ben Bolker
Sent: Friday, September 29, 2023 10:00 AM
To: r-help@r-project.org
Subject: Re: [R] replace character by numeric value

[External Email]

   The reason you're getting the result as character is that you have 'side' as 
your alternative result in the second ifelse().  If "BUY" and "SELL" are the 
only options you might try

ifelse(side == 'BUY', 1, ifelse(side == 'SELL', -1, NA))

or

c(1,-1)[match(side, c("BUY", "SELL"))]

or

vals <- c(BUY=1, SELL = -1)
vals[side]


On 2023-09-29 9:21 a.m., Ebert,Timothy Aaron wrote:
> 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  On Behalf Of Enrico
> Schumann
> Sent: Thursday, September 28, 2023 3:13 AM
> To: arnaud gaboury 
> Cc: r-help 
> 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")=
>>
>>> 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")=
>>
>> 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"
>  ##  

Re: [R] replace character by numeric value

2023-09-29 Thread Ben Bolker
  The reason you're getting the result as character is that you have 
'side' as your alternative result in the second ifelse().  If "BUY" and 
"SELL" are the only options you might try


   ifelse(side == 'BUY', 1, ifelse(side == 'SELL', -1, NA))

or

   c(1,-1)[match(side, c("BUY", "SELL"))]

or

vals <- c(BUY=1, SELL = -1)
vals[side]


On 2023-09-29 9:21 a.m., Ebert,Timothy Aaron wrote:

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  On Behalf Of Enrico Schumann
Sent: Thursday, September 28, 2023 3:13 AM
To: arnaud gaboury 
Cc: r-help 
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")=


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")=

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@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.

__
R-help@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.


--
Dr. Benjamin Bolker
Professor, Mathematics & Statistics and Biology, McMaster University
Director, School of Computational Science and Engineering
(Acting) Graduate chair, Mathematics & Statistics
> E-mail is sent at my convenience; I don't expect replies outside of 
working hours.


__
R-help@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.


Re: [R] replace character by numeric value

2023-09-29 Thread Ebert,Timothy Aaron
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  On Behalf Of Enrico Schumann
Sent: Thursday, September 28, 2023 3:13 AM
To: arnaud gaboury 
Cc: r-help 
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")=
>
>> 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")=
>
> 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@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.

__
R-help@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.


Re: [R] replace character by numeric value

2023-09-28 Thread arnaud gaboury
On Thu, Sep 28, 2023 at 8:18 AM Ivan Calandra  wrote:
>
> Dear Arnaud,
>
> I don't quite unterstand why you have imbricated ifelse() statements. Do
> you have more that BUY (1) and SELL (-1)? If not, why not simply:
> mynewdf2 <- mydf2 |> dplyr::mutate(side = ifelse(side == 'BUY', 1, -1))

Yes it works indeed.
I found another solution :
df <- df |> mutate(side = as.numeric(ifelse(side == 'BUY', 1,
ifelse(side == 'SELL', -1, side
but yours is much simpler. and I can use dplyr::if_else() or
fifelse(). which looks safer and faster.

>
> That would solve the problem. I'm not quite sure exactly what happens,
> but this is probably related to the intermediary result after the first
> ifelse(), where characters and numeric are mixed. But conversion to
> numeric works properly, so I'm not sure what you meant:
> as.numeric(mynewdf2$side)
>
> More generally, why are you trying to convert to 1 and -1?

I am working on a crypto asset portfolio and want to compute profit &
loss. To achieve it, I need to convert (BUY * quantity) to quantity
and
(SELL * quantity) to -quantity.

Thank you for your answer.

Why not use
> factors? Are you trying to test contrasts maybe? I would be surprised if
> the function for the statistical test you are trying to use does not
> deal with that already on its own.
>
> HTH,
> Ivan
>
>
> On 27/09/2023 13:01, arnaud gaboury wrote:
> > 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")=
> >
> >> 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")=
> >
> > Thank you for help
> >
> >   [[alternative HTML version deleted]]
> >
> > __
> > R-help@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.
>
> __
> R-help@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.

__
R-help@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.


Re: [R] replace character by numeric value

2023-09-28 Thread Enrico Schumann
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")=
>
>> 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")=
>
> 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@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.


Re: [R] replace character by numeric value

2023-09-28 Thread Ivan Calandra

Dear Arnaud,

I don't quite unterstand why you have imbricated ifelse() statements. Do 
you have more that BUY (1) and SELL (-1)? If not, why not simply:

mynewdf2 <- mydf2 |> dplyr::mutate(side = ifelse(side == 'BUY', 1, -1))

That would solve the problem. I'm not quite sure exactly what happens, 
but this is probably related to the intermediary result after the first 
ifelse(), where characters and numeric are mixed. But conversion to 
numeric works properly, so I'm not sure what you meant:

as.numeric(mynewdf2$side)

More generally, why are you trying to convert to 1 and -1? Why not use 
factors? Are you trying to test contrasts maybe? I would be surprised if 
the function for the statistical test you are trying to use does not 
deal with that already on its own.


HTH,
Ivan


On 27/09/2023 13:01, arnaud gaboury wrote:

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")=


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")=

Thank you for help

[[alternative HTML version deleted]]

__
R-help@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.


__
R-help@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.


[R] replace character by numeric value

2023-09-28 Thread arnaud gaboury
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")=

> 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")=

Thank you for help

[[alternative HTML version deleted]]

__
R-help@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.