r-突变函数向下舍入值,为什么



我从本课中学习了数据库,并尝试用它进行一些操作

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

我不明白为什么"比率;变量向下取整。有人能解释一下吗?

我的猜测是,您所采用的比率record_idmonth的列是integer类型。这意味着答案是以integer类型返回的,因此它向下舍入/放弃小数位数。

不,这不是默认的R行为。但这是默认的数据库行为。为什么这很重要?当使用dbplyr时,计算不是在R中完成的,而是从R转换为SQL并在数据库中执行。

修复方法很简单:使用十进制1.0:开始计算

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

这是因为11.0与数据库不同。1是整数类型,1.0是十进制类型。因为比率的计算现在从一个小数开始,所以现在应该返回一个小数。

最新更新