R 保留大数

R 保留大数,r,csv,import,precision,numeric,R,Csv,Import,Precision,Numeric,我试图读取第一列中有条形码的CSV文件,但当R将其放入data.frame时,它会将1665535004661转换为1.67E+12 有没有办法以整数格式保存此数字?我尝试分配一类“double”,但没有成功,也没有分配一类“character”。一旦它处于1.67E+12格式,任何将其转换回整数的尝试都会返回167000000000查看int64包:。尝试使用colClasses=“character” 查看此链接。根据您在评论中所说的内容,您可以通过在read.table()中指定colC

我试图读取第一列中有条形码的CSV文件,但当R将其放入data.frame时,它会将
1665535004661
转换为
1.67E+12


有没有办法以整数格式保存此数字?我尝试分配一类
“double”
,但没有成功,也没有分配一类
“character”
。一旦它处于
1.67E+12
格式,任何将其转换回整数的尝试都会返回
167000000000
查看
int64
包:。

尝试使用colClasses=“character”


查看此链接。

根据您在评论中所说的内容,您可以通过在
read.table()中指定
colClasses
,直接将文本作为字符导入。例如:

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
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
举例说明:

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

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

options(digits = 22)
dat
#------
             V1
1 1665535004661
选项(数字=7)

来自?is.integer页面的dat:

请注意,R的当前实现对整数向量使用32位整数,因此可表示整数的范围限制为+/-2*10^9

1665535004661L>2*10^9 [1] 真的

你想要包Rmpfr

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

由于没有对该值执行算术运算,字符是合适的。可以使用colClasses参数为每列设置各种类,这可能比使用all字符要好

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"
x它不是“1.67E+12格式”,只是不能完全使用默认值打印。R读取的结果很好,整数就在那里

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

看,数字一直都在那里。除非你有大量的数字,否则它们不会丢失。对你带来的数字进行排序可以很好地工作,你可以使用digits选项显式调用print(),来查看你的数据。frame,而不是通过键入名称隐式地查看数据。

你可以在执行此操作时使用digitals参数
read.csv
。例如:

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
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.

这将保留长整数的值,并且在导入数据时不会干扰它们的表示。

我倾向于使用
选项(scipen=99999999)
在每个脚本的开头。将数字输出到大量的小数位数,而不是科学格式。您可以将'9'的数字更改为要显示的小数位数。有一种方法可以在“全局选项”中进行设置,但我不能100%确定如何设置。

有没有方法将其作为字符导入?我不需要对其进行数学运算,我知道只需要对其进行排序。这基本上覆盖了我下面用
选项()讨论的方法。
。作为参考,我们应该阅读并注意
?print中的警告。默认值
,因为>=16位的实现开始成为平台特定的问题,因为
sprintf()的实现
开始因基础C代码的不同而有所不同。如果使用options()也一样。这只是一个输出默认值。我认为如果你在回答中明确说明这一点会更好。因为这是相当模糊的。尝试天真地阅读它,我想知道“数字”选项是否只是更改保留的数字数量,如何读入?…什么?好的一点-编辑我的答案以更明确地说明这一点。请随意调整如果你认为有必要,再往前走。干杯!-蔡斯