默认情况下,当我使用dbGetQuery()
包中的DBI
时,它会返回integer64
类型的列作为integer64
的{{1}}类。
然后我使用bit64
尝试过滤和操作我的结果,但由于dplyr
不支持dplyr
类型的对象而遇到问题。
是否可以将integer64
设置为将dbGetQuery()
列作为类integer64
返回?
答案 0 :(得分:8)
即使没有完全支持64位整数(参见GitHub issue),你仍然可以使用dplyr来改变integer64
:
library(dplyr, warn.conflicts = FALSE)
df <- data_frame(a = bit64::as.integer64(1:3), b = 1:3, c = 1.5:4)
df
#> # A tibble: 3 x 3
#> a b c
#> <S3: integer64> <int> <dbl>
#> 1 1 1 1.5
#> 2 2 2 2.5
#> 3 3 3 3.5
df %>% mutate_if(bit64::is.integer64, as.integer)
#> # A tibble: 3 x 3
#> a b c
#> <int> <int> <dbl>
#> 1 1 1 1.5
#> 2 2 2 2.5
#> 3 3 3 3.5
答案 1 :(得分:2)
DBI规范通过bigint
参数提供此功能。驱动程序之间的支持显然会有所不同。
dbConnect(drv, bigint="integer", ...)
以下值的行为如下:
“整数”:总是以整数形式返回,默默溢出
“数字”:始终以数字形式返回,无提示地舍入
“字符”:始终以小数形式返回字符
“ integer64”:作为可以使用as.integer()强制转换的数据类型返回 (警告溢出),as.numeric()和as.character()
来源: https://cran.r-project.org/web/packages/DBI/vignettes/spec.html#_specification_17