1

我总是将 excel 文件转换为 CSV 文件以导入到 R,如下所示。

myDataFrame <- read.csv("mydatafile.csv", stringsAsFactors=F)

但是,当我转换用中文编写的 xlsx 文件时,我遇到了一个严重的问题。大多数字符(不是全部)显示'??' 因为编码。

所以,我决定使用xlsx包直接导入。但问题是excel文件的大小超过10MB。由于 JVM 内存限制,它给了我一条错误消息。(我假设在xlsx内部使用 Java。)

.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, 中的错误:
java.lang.OutOfMemoryError: 超过 GC 开销限制

如何将中文excel文件导入R?我尝试了“另存为..”CSV 文件,并在记事本中打开它,并使用选项“UTF-8”保存它。但结果是一样的(显示'??')。

仅供参考,我可以在原始 excel 文件中看到完整的汉字。

4

1 回答 1

2

你的问题是一个混合问题。假设您已将 xlsx 文件转换为 csv。如果还没有,请参考其他类似的主题。我认为这一步最好在一些外部工具中执行,而不是在 R 中。

现在我们有了一个csv,还有两个问题,大小和编码。对于编码,正如您在评论中提到的,您可以使用几个 R 函数(如 read.csv)的 encoding= 选项。对于从 Excel 出来的中文文件,编码很可能是“GB18030”。如果不能确定,Libreoffice Calc 的打开文件对话框可能会给你一些线索。

如果文件很大,可以先使用 Linux 命令 iconv 转换编码,然后在 R 中进一步处理。

现在是尺寸部分。如果您有足够的内存,read.csv 可以轻松处理 50mb 甚至 500mb 的 csv,尽管不一定很快。如果文件大于1G,有两种选择:

  1. 使用 sqldf 包,它将 csv 读入一个临时数据库,然后读入一个 data.frame。
  2. 逐行处理csv。首先使用 file() 创建连接,然后使用 readLines() 逐行处理。最后手动将结果组合到 data.frame 或其他适当的结构中。

第一个更简单,第二个可以处理非常大的文件。

希望能帮助到你。

于 2013-11-01T13:26:17.220 回答