R дублирует большие целые числа при чтении во фрейме данных - PullRequest
0 голосов
/ 28 января 2019

У меня есть таблица базы данных со столбцом, содержащим различные 17-значные числа.Когда я прошу R прочитать раздел или всю эту таблицу в фрейм данных, он дублирует некоторые значения 4 или 5 раз и отбрасывает другие.В результате таблица с, скажем, 17 уникальными значениями в итоге получит 6. Это странно.Это происходит, когда я считываю данные, используя соединение RODBC, или сохраняю их в CSV и загружаю их таким образом.Это определенно проблема R, потому что я изолировал проблему с поддельными данными:

base_num <- "9600000005206"

# Now create a vector of unique numbers in character format
x <- paste0(base_num, seq(5680, 5760, 1))

x

x
[1] "96000000052065680" "96000000052065681" "96000000052065682" 
"96000000052065683" "96000000052065684" "96000000052065685" 
"96000000052065686"
[8] "96000000052065687" "96000000052065688" "96000000052065689" 
"96000000052065690" "96000000052065691" "96000000052065692" 
"96000000052065693"
[15] "96000000052065694" "96000000052065695" "96000000052065696" 
"96000000052065697" "96000000052065698" "96000000052065699" 
"96000000052065700"

# Convert them to numeric
# ta-da! Duplicate values and dropped values
as.numeric(x)

 [1] 96000000052065680 96000000052065680 96000000052065680 
 96000000052065680 96000000052065680 96000000052065680 96000000052065680
 [8] 96000000052065680 96000000052065696 96000000052065696 
 96000000052065696 96000000052065696 96000000052065696 96000000052065696
 [15] 96000000052065696 96000000052065696 96000000052065696 
 96000000052065696 96000000052065696 96000000052065696 96000000052065696

Это то, что происходит, когда я читаю из базы данных или CSV, где я знаю, что столбец содержит уникальные значения.Спасибо.

РЕДАКТИРОВАТЬ:

Спасибо за освещение проблемы и как исправить ее в R. Проблема по-прежнему в том, что R завершает это преобразование при чтении данных.Даже если я укажу свой запрос как:

CAST(longnumber AS VARCHAR(50)) as 'target_column'

R все равно обрабатывает его как слишком длинное целое число.Я должен написать:

CAST(longnumber AS VARCHAR(50)) + 'S' as 'target_column'

, чтобы заставить R читать его как символьное поле, и это все, что мне нужно.Есть идеи?

1 Ответ

0 голосов
/ 28 января 2019

Попробуйте использовать integer64:

library(bit64) 
as.integer64(x)
...