r - Mutate 函数将值向下舍入,为什么?

标签 r sqlite dplyr dbplyr

我从 this 获取数据库类(class)并尝试用它进行一些操作。这是我的代码:

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 是整数类型。这意味着答案以整数类型返回,因此它会向下舍入/丢弃小数位。

不,这不是默认的 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 是小数类型。因为比率的计算现在以小数开始,所以现在应该返回小数。

关于r - Mutate 函数将值向下舍入,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68153537/

相关文章:

python-3.x - SQLite 数据库被锁定

python - web.py todo list using sqlite invalid literal for int()

r - 如何在 excel 中复制或复制 "fill"值向上或向下一定行数

R - 如何将 ifelse(str_detect ...) 的输出应用于整个组

r - gsub 返回表达式的所有匹配项,而不仅仅是最后一个匹配项

r - 推送返回父函数

r - Rmarkdown中的HTML标签转word文档

r - 使用 R Shiny 改变数据框

vb.net - 如何在 SQLite 中创建数据库并添加 2 个表

r - 在数据框中添加名称为最大列的新列