18

默认情况下,当我dbGetQuery()DBI包中使用它时,它会返回类型列integer64作为.integer64bit64

然后我dplyr尝试过滤和操作我的结果,但遇到了dplyr不支持类型对象的问题integer64

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

4

2 回答 2

18

DBI 规范通过bigint参数提供此功能。支持显然会因驱动程序而异。

dbConnect(drv, bigint="integer", ...)

以下值的行为如下:

"integer": 总是返回整数,静默溢出

“numeric”:总是以数字形式返回,静默四舍五入

“字符”:始终将十进制表示形式作为字符返回

“integer64”:作为可以使用 as.integer()(溢出警告)、as.numeric() 和 as.character() 强制转换的数据类型返回

来源: https ://cran.r-project.org/web/packages/DBI/vignettes/spec.html#_specification_17

于 2018-12-08T09:55:35.047 回答
14

即使不完全支持 64 位整数(参见GitHub 问题),您仍然可以使用 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
于 2017-07-18T21:59:18.637 回答