Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于Excel的原因,长数字字段不零售数字字符串。Excel Office Professional 2013将数字转换为整数_R_Numeric_Exponential_R Factor - Fatal编程技术网

由于Excel的原因,长数字字段不零售数字字符串。Excel Office Professional 2013将数字转换为整数

由于Excel的原因,长数字字段不零售数字字符串。Excel Office Professional 2013将数字转换为整数,r,numeric,exponential,r-factor,R,Numeric,Exponential,R Factor,我正在R中读取一个包含转换ID列的csv文件。我遇到的问题是我的conversionID被四舍五入为指数。下面是我正在读取到R中的CSV文件(在Excel中打开)的快照。如您所见,转换ID是指数格式,但值为:383305820480 当我将数据读入R时,使用下面的行,我得到了下面的输出。这看起来像是在舍入转换ID字符串 x<-read.csv("./Test2.csv") options("scipen"=100, "digits"=15) x 我得到以下输出。正如你所看到的,我不再有

我正在R中读取一个包含转换ID列的csv文件。我遇到的问题是我的conversionID被四舍五入为指数。下面是我正在读取到R中的CSV文件(在Excel中打开)的快照。如您所见,转换ID是指数格式,但值为:383305820480

当我将数据读入R时,使用下面的行,我得到了下面的输出。这看起来像是在舍入转换ID字符串

x<-read.csv("./Test2.csv")
options("scipen"=100, "digits"=15)
x
我得到以下输出。正如你所看到的,我不再有一个唯一的标识符,因为它将数字四舍五入

我还尝试使用代码将文件作为一个因子来读取,但是我得到了相同的输出,数字四舍五入。我需要Conversion.ID作为唯一标识符

x<-read.csv("./Test2.csv", colClasses="character")

x我无法复制你的经验

更新:OP报告问题实际上是Excel在导入时转换/舍入数据[!!!])

我在磁盘上以全精度创建了一个文件(我不知道数据的最低有效位,除了第一个元素,您没有显示它们,但我在“单位”位置放置了一个非零值以供说明):

阅读文件并精确打印(使用
check.names=FALSE
以获得完美的“往返”功能,而不是您希望定期执行的操作):

从R中检查磁盘上文件的最简单方法是
file.show()

如果ID字符串更长,则需要将其作为字符读取,以避免精度损失:

read.csv("Test2.csv",colClasses="character")
##      Conversion.ID
## 1     383305820480
## 2   39634500000002
## 3  213905000000002
## 4 1016890000000002
## 5 1220910000000002

通过以字符形式导入并使用引号导出以保护值,您可能可以更安全地往返Excel(如果您仍然认为这是一个好主意的话)。

我刚刚解决了这个问题。看起来我的Excel版本正在转换数据,导致数据丢失。如果我在下载后避免在Excel中打开该文件,它将保留所有数字。我不确定这是否是新版本的已知问题。我正在使用Excel Office Professional Plus 2013。

您的数据有多大?您能在
read.table
中指定
colClasses
参数并将其设置为字符列吗?@ekim:“不走运”是什么意思?请给我们一个可复制的例子好吗?@ekim:“没用”对我们来说太模糊了,无法帮助你@rawr的建议是实现这一点的标准方法。重复一遍,我们需要更多的细节(您使用了什么代码?将
str()
应用到结果中的结果是什么?您得到了什么错误和/或警告?)强烈推荐可复制的示例。感谢您的反馈。我刚刚解决了这个问题。看起来Excel正在转换数据,导致数据丢失。如果我在下载后避免在Excel中打开该文件,它将保留所有数字。我不确定这是否是新版本的已知问题。我正在使用Excel Office Professional Plus 2013.Wow。我知道有问题(,,)但这是一个新问题!Excel仅将显示的精度保存为CSV。只要让它显示更多的数字,你就会想失去精度。@Roland唯一有效的方法是我在Excel中的数字前加上一个“A”。然而,我有数千个文件要更改,所以这是不可行的。你提出了一个可行的选择,但我认为它不需要人工干预。
 writeLines(c(
 "Conversion ID",
 "    383305820480",
 "  39634500000002",
 " 213905000000002",
 "1016890000000002",
 "1220910000000002"),
 con="Test2.csv")
x <- read.csv("Test2.csv",check.names=FALSE)
options(scipen=100)
print(x,digits=20)
##      Conversion ID
## 1     383305820480
## 2   39634500000002
## 3  213905000000002
## 4 1016890000000002
## 5 1220910000000002
write.csv(x,"Test3.csv",row.names=FALSE,quote=FALSE)
file.show("Test3.csv")
## Conversion ID
## 383305820480
## 39634500000002
## 213905000000002
## 1016890000000002
## 1220910000000002

x3 <- read.csv("Test3.csv",check.names=FALSE)
all.equal(x,x3)  ## TRUE
system("diff -w Test2.csv Test3.csv")  ## no difference
read.csv("Test2.csv",colClasses="character")
##      Conversion.ID
## 1     383305820480
## 2   39634500000002
## 3  213905000000002
## 4 1016890000000002
## 5 1220910000000002