设置dbGetQuery以将integer64作为整数返回

时间:2017-07-18 15:54:06

标签: r integer odbc dplyr r-dbi

默认情况下,当我使用dbGetQuery()包中的DBI时,它会返回integer64类型的列作为integer64的{​​{1}}类。

然后我使用bit64尝试过滤和操作我的结果,但由于dplyr不支持dplyr类型的对象而遇到问题。

是否可以将integer64设置为将dbGetQuery()列作为类integer64返回?

2 个答案:

答案 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