使用openxlsx read.xlsx从多类列导入数据框。理想的结果是将所有值完全以Excel中的表示形式导入为字符串。但是,某些小数表示为很长的浮点数。
样本数据只是一个Excel文件,其列包含以下行:
abc123,
556.1,
556.12,
556.123,
556.1234,
556.12345
require(openxlsx)
df <- read.xlsx('testnumbers.xlsx', )
使用上述R代码读取文件会导致df中包含以下字符串
values:
abc123,
556.1,
556.12,
556.12300000000005,
556.12339999999995,
556.12345000000005
生产中提供的Excel文件的列格式为“常规”。如果我将列的格式设置为“文本”,则除非我明确双击Excel中的每个单元格并按Enter,否则没有任何改变。在这种情况下,数字将正确显示为字符串。不幸的是,在生产环境中不能单击每个单元格。任何解决方案(Excel,R或其他方式)都值得赞赏。
*编辑: 我已经阅读了这个问题,并相信我理解正在发生的事情背后的数学原理。在这一点上,我想我正在寻找一种解决方法。如何在不更改表示形式的情况下从Excel以文本形式浮动到R数据框?
答案 0 :(得分:1)
我能够使用python中的pandas将正确的格式转换为数据框。
import pandas as pd
test = pd.read_excel('testnumbers.xlsx', dtype = str)
这可以作为解决方法,但我希望看到一个内置于R中的解决方案。
答案 1 :(得分:0)
这是R中使用openxlsx
的一种变通方法,我曾经用来解决类似的问题。我认为它将解决您的问题,或者至少允许您以编程方式将其设置为excel文件中的文本格式。
我将使用它来重新格式化大量文件中的特定单元格(在我的情况下,我正在将其从普通格式转换为“科学格式”,以示例说明如何将其更改为另一种格式)。
这会使用您在OP中引用的openxlsx
包中的功能
首先,将xlsx文件作为工作簿加载(存储在内存中,该文件保留了所有xlsx格式/等;与问题中显示的方法略有不同,后者仅提取数据):
testnumbers <- loadWorkbook(here::here("test_data/testnumbers.xlsx"))
然后创建一个“样式”以应用,该样式将数字转换为“文本”,并将其应用于虚拟工作表(在内存中)。
numbersAsText <- createStyle(numFmt = "TEXT")
addStyle(testnumbers, sheet = "Sheet1", style = numbersAsText, cols = 1, rows = 1:10)
最后,将其保存回原始文件:
saveWorkbook(testnumbers,
file = here::here("test_data/testnumbers_formatted.xlsx"),
overwrite = T)
打开excel文件时,数字将存储为“文本”