我正在尝试读取第一列中包含条形码的CSV文件,但是当R将其转换为data.frame时,它会将1665535004661
转换为1.67E+12
。
有没有办法以整数格式保存这个数字?我尝试分配一个"double"
类,但这不起作用,也没有分配"character"
类。一旦它处于1.67E+12
格式,任何将其转换回整数的尝试都会返回167000000000
。
答案 0 :(得分:14)
它不是“1.67E + 12格式”,它不会完全使用默认值打印。 R正好读它,整个数字就在那里。
x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661
看,这些数字一直存在。除非你有很多数字,否则它们不会迷路。对你带来的内容进行排序将正常工作,你可以通过数字选项显式调用print()来查看你的data.frame,而不是通过输入名称隐式地调用。
答案 1 :(得分:11)
通过在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
下详细了解此信息。约翰在他的回答中描述了这一点,所以应该归功于他,因为它可以说明这种细微差别。
答案 2 :(得分:8)
尝试使用colClasses =“character”
read.csv("file.csv", colClasses = "character")
http://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html
看一下这个链接。
答案 3 :(得分:4)
来自?is.integer页面:
“请注意,R的当前实现对整数向量使用32位整数,因此可表示整数的范围限制为大约+/- 2 * 10 ^ 9?
1665535004661L&gt; 2 * 10 ^ 9 [1] TRUE
你想要包Rmpfr。
library(Rmpfr)
x <- mpfr(15, precBits= 1024)
答案 4 :(得分:3)
查看int64
包:Bringing 64-bit data to R。
答案 5 :(得分:3)
您可以在使用时使用数字参数
read.csv
。例如:
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
这会保留长整数的值,并且在导入数据时不会弄乱它们的表示。
答案 6 :(得分:2)
由于您没有对此值执行算术,因此字符是合适的。您可以使用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"
答案 7 :(得分:1)
我倾向于在每个脚本的开头使用options(scipen = 9999999999)
。将数字输出到小数位数而不是科学格式。您可以将“ 9”的数目更改为要显示的小数位数。有一种方法可以在全局选项中进行设置,但我不确定100%如何设置。