我有一个 Excel 文件,其中有一列可变长度的字母数字代码 - 请参阅问题末尾的示例。我一直在尝试使用
readxl
库将其读入 R:
read_xlsx("File.xlsx")
这适用于超过 90% 的数据,但对于极少数数据点,我会遇到浮点错误,例如
2.2000000000000002
或 8.1999999999999993
。
这只发生在“数字点数”格式的代码中,即不适用于独立数字(
2
或 8
)或包含字母的代码(2.4.a
或 5.2.b.i
)。
我在 Excel 中选择了整个列并将格式设置为
Text
,但情况没有改善。我也尝试过使用不同的R库来读取数据:openxlsx
的read.xlsx
函数,但出现了同样的错误。这表明错误在于 Excel 保存文件的方式(将十进制代码视为数字,即使我已将整列设置为文本),而不是 R 的错误。R 成功地将列读取为字符 (<chr>
)。
在原始 .xlsx 文件中 | 由 R 读入为 |
---|---|
1 | 1 |
1.1 | 1.1000000000000001 |
1.2 | 1.2 |
1.3 | 1.3 |
2 | 2 |
2.1 | 2.1 |
2.2 | 2.2.2000000000000002 |
2.3 | 2.2999999999999998 |
2.4 | 2.4 |
2.5 | 2.5 |
3 | 3 |
3.1 | 3.1 |
3.1.a | 3.1.a |
3.1.b | 3.1.b |
3.1.c | 3.1.c |
3.1.d | 3.1.d |
3.2 | 3.2 |
3.3 | 3.3 |
3.3.a | 3.3.a |
3.3.b | 3.3.b |
3.4 | 3.4 |
4 | 4 |
4.1 | 4.0999999999999996 |
4.1.a | 4.1.a |
4.1.b | 4.1.b |
这种样式“1.1”是有问题的,因为它可以被数字或日期接受。可以通过在字符串开头放置撇号来解决:“'1.1”。这会强制 Excel 将输入的文本视为文本。这可能可以解决问题。否则,在字符串的开头放置任意字母:“R1.1”。考虑到它的含义,它不应该影响任何东西,但代码不会被解析为数字。