如何在R中使得data.table中的长数字不显示为科学计数法模式?

11 浏览
0 Comments

如何在R中使得data.table中的长数字不显示为科学计数法模式?

我在一个文件夹中有几个.csv文件。我想通过使用以下命令一次性读取它们:\n

library(data.table)
path <- path
list <- list.files(path, pattern="*.csv")
files <- paste(path, list, sep='/')
DT <- do.call(rbind, lapply(files, fread))

\n然而,由于第一列是一个12位数,data.table以科学计数法的方式显示,如\n

5.43971221673e-313

\n我应该如何将所有科学计数法的数字转换为普通整数?\n非常感谢!\n第一次编辑:\n我使用以下命令后\n

options("scipen"=100, "digits"=12)

\n它仍然显示数字如\n

5.43971221673e-313

\n即使我应用了以下命令\n

options(scipen=999)

\n它给我返回的数字是\n

0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543971221673

\n而且即使543971221673也不是正确的数字,正确的应该是\n

110101001001

\n我尝试使用data.frame进行转换,它起作用了。\n

a <- read.csv(files)
a[,1] <- as.character(a[,1])

\n但是我更喜欢使用data.table来提高速度。\n谢谢大家!

0
0 Comments

问题的出现原因是使用data.table包中的fread函数读取大整数数据时,数据以科学计数法显示。解决方法是安装bit64包或者在读取数据之前设置options(datatable.integer64="character")。具体的解决步骤如下:

1. 安装bit64包:可以使用install.packages("bit64")命令进行安装。

2. 或者在读取数据之前设置options(datatable.integer64="character"):可以将这段代码放在data.table之前。

3. 读取数据:可以使用以下代码进行数据读取:

library(data.table)
path <- path
list <- list.files(path, pattern="*.csv")
files <- paste(path, list, sep='/')
options(datatable.integer64="character")
DT <- rbindlist(lapply(files, fread))

以上是解决问题的方法,希望对你有帮助!

0
0 Comments

问题的原因是在R中使用data.table时,当数字较大时,默认显示为科学计数法。解决方法是使用选项`scipen`来设置科学计数法的显示方式。

首先,我们可以看到在设置`scipen`为999时,data.table中的数字显示为完整的长数字。但是,当`scipen`设置为4时,data.table中的数字显示为科学计数法。

为了将数字显示为完整的长数字,我们可以将`scipen`设置为0。这样,data.table中的数字将以完整的长数字显示。

然而,一位用户提到,当使用`read.csv`导入数据并对列应用`as.character()`函数时,数字显示为正确的长数字。这可能是因为在导入过程中,R将数字识别为字符型数据,而不是数值型数据。

此外,用户尝试了另一种方法,即使用`fread`函数从文件中读取数据,并将其转换为字符型数据。然而,这种方法并没有解决问题。

要解决data.table中长数字显示为科学计数法的问题,可以通过设置选项`scipen`为0来实现。然而,如果使用`read.csv`导入数据并将其转换为字符型数据,可能会得到正确的长数字显示。

0