我想读的是在第一列条形码CSV文件,但是当R得到它变成一个data.frame,将其转换1665535004661
到1.67E+12
。
有没有办法保存在一个整数格式这个数字? 我试图将类分配的"double"
,但没有工作,也没有指定一个类的"character"
。 一旦它在1.67E+12
格式的任何企图将其转换回一个整数返回167000000000
。
我想读的是在第一列条形码CSV文件,但是当R得到它变成一个data.frame,将其转换1665535004661
到1.67E+12
。
有没有办法保存在一个整数格式这个数字? 我试图将类分配的"double"
,但没有工作,也没有指定一个类的"character"
。 一旦它在1.67E+12
格式的任何企图将其转换回一个整数返回167000000000
。
这不是一个“1.67E + 12格式”,它只是将不会完全使用默认设置打印。 R的读取它就好了整个数字是存在的。
x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661
见,这个数字在那里一直。 他们不迷路,除非你有一个非常大的数字位数。 你带来了什么排序将正常工作,你可以直接显式调用印刷()与数字选项来查看您的data.frame,而不是隐式键入名称。
关于你的评论说捡,你可以直接通过指定导入的文本为字符colClasses
在read.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
。 这是约翰描述他的回答使信贷应该去他那照亮细微差别。
尝试用colClasses =“八字”工作
read.csv("file.csv", colClasses = "character")
http://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html
看看这个链接。
从is.integer页?
“注意的R,当前的实现方式中使用的32位整数为整数矢量,所以可表示整数的范围被限制到约+/- 2 * 10 ^ 9?
1665535004661L> 2 * 10 ^ 9 [1] TRUE
你想打包Rmpfr。
library(Rmpfr)
x <- mpfr(15, precBits= 1024)
看一看所述int64
包: 带来的64位数据至R 。
您可以使用,当你正在做的数字参数read.csv
。 因此,例如:
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
这保留了长整数的值,当您导入数据不惹他们的代表。
既然你是不是对这个值执行算术,字符为宜。 您可以使用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"