【问题标题】:How to read excel file in Chinese character [R]?如何读取汉字[R]的excel文件?
【发布时间】:2013-11-12 09:44:29
【问题描述】:

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

【问题讨论】:

  • 在我看来,您还没有完成看似显而易见的搜索:[r] chinese encoding
  • 这似乎不是关于 R 的问题?如果是关于读入 R,很好,很乐意提供帮助,但发帖人的问题是他无法以正确的编码将 Excel 工作簿导出为 CSV。这确定是 Excel 和/或操作系统问题吗?
  • [This question](stackoverflow.com/questions/4221176/excel-to-csv-with-utf8-encoding) 对将 Excel 文件保存为 UTF-8 文本或其他中间格式有很多有用的回答比如 UTF-16 在获取 UTF-8 文本文件的路上。
  • @SlowLearner 感谢您的评论。但是,我已经尝试过使用 OpenOffice。 OpenOffice 无法打开 excel 文件。我一直在等待超过 10 分钟才能打开文件(冻结)。我认为这是因为它的大小。我不允许使用谷歌办公室。我们公司的安全团队阻止登录谷歌帐户(并阻止上传)。
  • @DWin 感谢您的评论。我不担心导入使用不同编码的数据。我可以更改编码选项 'encoding="UTF-8"' 或其他。这个问题有2个问题。 1.如何将excel转换为UTF-8或其他编码格式的csv。 2. excel文件超过10MB如何使用xlsx包

标签: r excel csv


【解决方案1】:

您的问题是复杂的。假设您已将 xlsx 文件转换为 csv。如果还没有,请参考this one 等其他主题。我认为这一步最好在一些外部工具中执行,而不是在 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 或其他适当的结构中。

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

希望对你有帮助。

【讨论】:

  • 非常感谢。特别是第二部分的答案真的很有用!现在我有 84GB 的 csv 文件.. :( 我不认为 read.csv 可以处理。我假设如果我按照你的回答我可以处理大数据文件。
猜你喜欢
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多