3 votes

R duplique de grands entiers lors de la lecture d'une base de données

J'ai une table de base de données avec une colonne contenant des nombres distincts de 17 chiffres. Lorsque je demande à R de lire une partie ou la totalité de cette table dans un dataframe, il duplique certaines valeurs 4 ou 5 fois et en supprime d'autres. L'effet est qu'un tableau avec disons 17 valeurs uniques finira par en avoir 6. C'est bizarre. Cela se produit lorsque je lis les données à l'aide de la connexion RODBC ou lorsque je les enregistre dans un fichier csv et que je les charge de cette manière. Il s'agit bien d'un problème R car j'ai isolé le problème avec de fausses données :

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

C'est ce qui se passe lorsque je lis à partir de la base de données ou d'un CSV où je sais que la colonne contient des valeurs uniques. Merci de votre compréhension.

EDITAR:

Merci d'avoir mis en évidence le problème et la façon de le résoudre dans R. Le problème est toujours que R effectue cette transformation lors de la lecture des données. Même si je spécifie ma requête comme suit :

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

R encore le traite comme un entier trop long. Je dois écrire :

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

pour que R le lise comme un champ de caractères, ce qui est tout ce dont j'ai besoin. Des idées ?

5voto

LocoGris Points 3991

Essayez d'utiliser integer64 :

library(bit64) 
as.integer64(x)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X