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