保留大量数字

Jam*_*mes 12 csv precision import r numeric

我正在尝试读取第一列中包含条形码的CSV文件,但是当R将其转换为data.frame时,它将转换16655350046611.67E+12.

有没有办法以整数格式保存这个数字?我尝试分配一类"double",但是没有用,也没有分配一类"character".一旦它处于1.67E+12格式,任何将其转换回整数的尝试都会返回167000000000.

Cha*_*ase 14

了解您在评论中所说的内容,您可以通过指定colClassesin 来直接将文本导入为字符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
Run Code Online (Sandbox Code Playgroud)

或者(以及其他用途),您可以在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.
Run Code Online (Sandbox Code Playgroud)

举例说明:

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

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

options(digits = 22)
dat
#------
             V1
1 1665535004661
Run Code Online (Sandbox Code Playgroud)

要完全充实这一点并考虑到设置全局设置的情况并不可取,您可以直接指定数字作为参数print(foo, digits = bar).你可以在下面阅读更多相关信息?print.default.约翰在他的回答中描述了这一点,所以应该归功于他,以阐明这种细微差别.


Joh*_*ohn 14

它不是"1.67E + 12格式",它不会完全使用默认值打印.R正好读它,整个数字就在那里.

x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661
Run Code Online (Sandbox Code Playgroud)

看,数字一直存在.除非你有很多数字,否则它们不会迷路.对引入的内容进行排序将正常工作,您可以使用digits选项显式调用print()来查看data.frame,而不是通过键入名称来隐式查看.


roc*_*wap 10

尝试使用colClasses ="character"

read.csv("file.csv", colClasses = "character")
Run Code Online (Sandbox Code Playgroud)

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

看看这个链接.


42-*_*42- 5

从?is.integer页面:

“请注意,当前R的实现将32位整数用于整数矢量,因此可表示整数的范围被限制为大约+/- 2 * 10 ^ 9?

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

您需要包Rmpfr。

library(Rmpfr)
x <- mpfr(15, precBits= 1024)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以在执行时使用数字参数 read.csv。例如:

read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
Run Code Online (Sandbox Code Playgroud)

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