如何阅读汉字excel文件[R]?

时间:2013-11-01 07:33:27

标签: r excel csv

我总是将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文件中看到完整的中文字符。

1 个答案:

答案 0 :(得分:1)

你的问题很复杂。我们假设您已将xlsx文件转换为csv。如果还没有,请参考this one等其他主题。我认为这一步最好用一些外部工具而不是R进行。

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

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

现在是尺寸部分。只要有足够的内存,read.csv就可以轻松处理50mb甚至500mb的csv,但不一定快。如果文件大于1G,则有两个选项:

  1. 使用sqldf包,它将csv读入临时数据库,然后读入data.frame。
  2. 逐行处理csv。首先使用file()创建连接,然后使用readLines()逐行处理它。最后手动将结果合并到data.frame或其他适当的结构中。
  3. 第一个更简单,第二个可以处理非常大的文件。

    希望它有所帮助。