保留大量保留大量(Preserving large numbers)

2019-05-12 03:14发布

我想读的是在第一列条形码CSV文件,但是当R得到它变成一个data.frame,将其转换16655350046611.67E+12

有没有办法保存在一个整数格式这个数字? 我试图将类分配的"double" ,但没有工作,也没有指定一个类的"character" 。 一旦它在1.67E+12格式的任何企图将其转换回一个整数返回167000000000

Answer 1:

这不是一个“1.67E + 12格式”,它只是将不会完全使用默认设置打印。 R的读取它就好了整个数字是存在的。

x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661

见,这个数字在那里一直。 他们不迷路,除非你有一个非常大的数字位数。 你带来了什么排序将正常工作,你可以直接显式调用印刷()与数字选项来查看您的data.frame,而不是隐式键入名称。



Answer 2:

关于你的评论说捡,你可以直接通过指定导入的文本为字符colClassesread.table() 例如:

num <- "1665535004661"
dat.char <- read.table(text = num, colClasses="character")
str(dat.char)
#------
'data.frame':   1 obs. of  1 variable:
 $ V1: chr "1665535004661"
dat.char
#------
             V1
1 1665535004661

或者(和其他用地),您可以指定digits下可变options() 缺省值是7位和在可接受的范围是1-22。 需要明确的是,设置不以任何方式改变该选项或改变基础数据,它仅仅控制它是如何在打印时在屏幕上显示。 从您的帮助页面?options

controls the number of digits to print when printing numeric values. It is a suggestion only.
Valid values are 1...22 with default 7. See the note in print.default about values greater than
15.

实施例示出了这样的:

options(digits = 7)
dat<- read.table(text = num)

dat
#------
            V1
1 1.665535e+12

options(digits = 22)
dat
#------
             V1
1 1665535004661

要完全充实了这一点,考虑到案件时设置的全局设置是不理想的,可以作为参数来直接指定数字print(foo, digits = bar) 。 你可以阅读更多关于这下?print.default 。 这是约翰描述他的回答使信贷应该去他那照亮细微差别。



Answer 3:

尝试用colClasses =“八字”工作

read.csv("file.csv", colClasses = "character")

http://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html

看看这个链接。



Answer 4:

从is.integer页?

“注意的R,当前的实现方式中使用的32位整数为整数矢量,所以可表示整数的范围被限制到约+/- 2 * 10 ^ 9?

1665535004661L> 2 * 10 ^ 9 [1] TRUE

你想打包Rmpfr。

library(Rmpfr)
x <- mpfr(15, precBits= 1024)


Answer 5:

看一看所述int64包: 带来的64位数据至R 。



Answer 6:

您可以使用,当你正在做的数字参数read.csv 。 因此,例如:

read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.

这保留了长整数的值,当您导入数据不惹他们的代表。



Answer 7:

既然你是不是对这个值执行算术,字符为宜。 您可以使用colClasses参数为每列,这可能是比使用所有字符最好设定多个等级。

data.csv:

a,b,c
1001002003003004,2,3

读出的字符,然后整数:

x <- read.csv('test.csv',colClasses=c('character','integer','integer'))
x
                 a b c
1 1001002003003004 2 3


mode(x$a)
[1] "character"

mode(x$b)
[1] "numeric"


文章来源: Preserving large numbers