我正在尝试读取第一列中包含条形码的 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
看,数字一直都在那里。除非您有大量的数字,否则它们不会丢失。对您输入的内容进行排序将正常工作,您只需使用数字选项显式调用 print() 即可查看您的 data.frame,而不是通过键入名称来隐式调用。
根据您在评论中所说的内容,您可以通过指定colClasses
in直接将文本导入为字符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="character"
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] 真
你想要包 Rmpfr。
library(Rmpfr)
x <- mpfr(15, precBits= 1024)
看看这个int64
包:Bringing 64-bit data to R。
你可以在做的时候使用数字参数
read.csv
。例如:
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
这保留了长整数的值,并且在您导入数据时不会弄乱它们的表示。
由于您没有对该值执行算术运算,因此字符是合适的。您可以使用 colClasses 参数为每列设置各种类,这可能比使用所有字符更好。
数据.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"
我倾向于options(scipen = 9999999999)
在每个脚本的开头使用。将数字输出到大量小数位而不是科学格式。您可以将“9”的数量更改为要显示的小数位数。有一种方法可以在全局选项中设置它,但我不是 100% 确定如何。