2017-07-18 68 views
3

返回integer64默認情況下,當我使用dbGetQuery()DBI包返回integer64類型的列作爲integer64bit64的。設置dbGetQuery爲整數

然後,我使用dplyr嘗試過濾和操縱我的結果,但由於dplyr不支持類型爲integer64的對象而出現問題。

是否可以設置dbGetQuery()返回integer64列作爲integer類?

+0

爲什麼不直接轉換爲整數調用'dbGetQuery後()'而不是在那個階段呢? –

+1

我覺得你三個選項是:(一)邁克爾的建議轉換爲整數後查詢; (b)在查詢中使用SQL的'CAST(... as integer32)';或(c)把它用於哪個ODBC驅動程序正在使用的問題板(也許['odbc'(https://github.com/rstats-db/odbc/issues))。我認爲後者是最適合於長期,但因爲'bit64'仍不全球使用/ R中接受,這可能是一場艱苦的戰鬥。 – r2evans

+1

「爲什麼不直接轉換爲整數調用dbGetQuery(),而在這個階段做之後?」 這本來是整潔的使用中dbGetQuery參數或某事做,但如果有這樣做的沒有更好的辦法那麼我想我必須要 – user1165199

回答

2

即使沒有完全支持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