2 votes

La fonction Mutate arrondit les valeurs à la baisse, pourquoi ?

J'ai pris la base de données de ce et a essayé d'effectuer quelques manipulations avec elle. Voici mon code :

install.packages(c("dbplyr", "RSQLite"))
dir.create("data_raw", showWarnings = FALSE)
download.file(url = "https://ndownloader.figshare.com/files/2292171",
              destfile = "data_raw/portal_mammals.sqlite", mode = "wb")
library(dplyr)
library(dbplyr)
mammals <- DBI::dbConnect(RSQLite::SQLite(), "data_raw/portal_mammals.sqlite")
test <- tbl(mammals, "surveys")%>%
        select(record_id, month)%>%
        mutate(ratio=record_id/month)
test

Je ne comprends pas pourquoi la variable "ratio" est arrondie à l'inférieur. Quelqu'un peut-il l'expliquer ?

3voto

Simon.S.A. Points 908

Je pense que les colonnes dont vous prenez le ratio, record_id et month sont des entiers de type. Cela signifie que la réponse est renvoyée sous la forme d'un nombre entier, et que les décimales sont arrondies ou supprimées.

Non, ce n'est pas le comportement de R par défaut. Mais c'est le comportement par défaut de la base de données. En quoi cela est-il important ? Lorsque vous utilisez dbplyr, les calculs ne sont pas effectués dans R mais sont traduits de R en SQL et exécutés dans la base de données.

La solution est simple : commencez le calcul avec la décimale. 1.0 :

test <- tbl(mammals, "surveys")%>%
        select(record_id, month)%>%
        mutate(ratio = 1.0 * record_id / month)

Cela fonctionne parce que 1 et 1.0 sont différents de ceux de la base de données. 1 est un type entier et 1.0 est de type décimal. Comme le calcul du ratio commence maintenant par une décimale, il devrait maintenant retourner une décimale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X