varias the superponer studio number lineas length graficos graficas characters r data.table

the - superponer graficas en r



NĂºmeros largos como una cadena de caracteres (6)

Como parte de mi conjunto de datos, una de las columnas es una serie de números de 24 dígitos.

Ejemplo:

bigonumber <- 429382748394831049284934

Cuando lo importo usando data.table::fread o read.csv , aparece como numérico en formato exponencial (por ejemplo, 4.293827e + 23).

options(digits=...) no funcionarán ya que el número tiene más de 22 dígitos.

Cuando lo hago

as.character(bigonumber)

lo que obtengo es "4.29382748394831e + 23"

¿Hay alguna manera de convertir bigonumber en una cadena de caracteres y mostrar todos los dígitos como caracteres? No necesito hacer cálculos matemáticos, pero sí debo buscar en su contra y hacer uniones dplyr en él.

Necesito esto después de la importación, ya que el número de columna varía de un mes a otro.

(Sí, en el mundo perfecto, mi proveedor de datos ascendente usaría un hash en lugar de un número largo y un número estático de columnas que permanecen iguales todos los meses, pero no puedo dictarles eso).


¿Utilice digest::digest en bigonumber para generar un hash md5 del mismo número?

bigonumber <- 429382748394831049284934 hash_big <- digest::digest(bigonumber) hash_big # "e47e7d8a9e1b7d74af6a492bf4f27193"


Puede especificar colClasses en su declaración fread o read.csv.

bignums 429382748394831049284934 429382748394831049284935 429382748394831049284936 429382748394831049284937 429382748394831049284938 429382748394831049284939 bignums <- read.csv("~/Desktop/bignums.txt", sep="", colClasses = ''character'')


Puedes suprimir la notación científica con

options(scipen=999)

Si define el número entonces

bigonumber <- 429382748394831049284934

Puedes convertirlo en una cadena:

big.o.string <- as.character(bigonumber)

Desafortunadamente, esto no funciona porque R convierte el número a un doble, perdiendo así la precisión:

#[1] "429382748394831019507712"

Los últimos dígitos no se conservan, como lo indica @SabDeM. Incluso ajuste

options(digits=22)

no ayuda, y en cualquier caso 22 es el mayor número permitido; Y en tu caso hay 24 dígitos. Así que parece que tendrás que leer los datos directamente como personaje o factor. Se han publicado excelentes respuestas que muestran cómo se puede lograr esto.

Como nota al margen, hay un paquete llamado gmp que permite el uso de números enteros arbitrariamente grandes. Sin embargo, hay un problema: tienen que ser leídos como caracteres (nuevamente, para evitar que la conversión interna de R se duplique).

library(gmp) bigonumber <- as.bigz("429382748394831049284934") > bigonumber Big Integer (''bigz'') : [1] 429382748394831049284934 > class(bigonumber) [1] "bigz"

La ventaja es que, de hecho, puede tratar estas entradas como números y realizar cálculos mientras conserva todos los dígitos.

> bigonumber * 2 #Big Integer (''bigz'') : #[1] 858765496789662098569868

Es posible que este paquete y mi respuesta aquí no resuelvan su problema, ya que leer los números directamente como caracteres es una forma más fácil de lograr su objetivo, pero pensé que podría publicarlo de todos modos como información para los usuarios que necesiten usar enteros grandes con más de 22 dígitos.


Si quieres números como números no puedes imprimir todos los valores. Las opciones de digits permiten un máximo de 22 dígitos. El rango es de 1 a 22. Utiliza el método print.default . Puedes configurarlo con:

options( digits = 22 )

Incluso con estas opciones, los números cambiarán. Ignoro por qué sucede eso, probablemente debido al hecho de que el objeto que está a punto de imprimir (el número) es más largo que la cantidad permitida de dígitos y, por lo tanto, R hace algunas cosas raras. Voy a investigar al respecto.


Use "escanear" para leer el archivo: el parámetro "qué" le permite definir el tipo de entrada de cada columna.


Vi esto antes de publicar mi respuesta, pero ya no la veo aquí.

establezca las options(scipen) en un valor grande para que no haya truncamiento:

options(scipen = 999) bigonumber <- 429382748394831049284934 bigonumber # [1] 429382748394831019507712 as.character(bigonumber) # [1] "429382748394831019507712"