write.xlsx的编码问题(openxlsx)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了write.xlsx的编码问题(openxlsx)相关的知识,希望对你有一定的参考价值。

我使用write.xlsx()函数(来自openxlsx包)将列表对象转换为excel电子表格,其中列表的每个元素都转换为excel文件的“工作表”。在过去,这个功能非常有用,我从未遇到过任何问题。我的理解是,这个包和函数特别不需要在计算机上进行任何特定的Java更新以使其工作。

但是,最近我发现该函数产生错误。这是我在控制台中为列表运行write.xlsx()时所说的内容:

Error in gsub("&", "&", v, fixed = TRUE) : 
  input string 5107 is invalid UTF-8

我已经确定了导致问​​题的数据帧,但我不确定如何识别数据帧的哪个部分导致错误。

我甚至继续将enc2utf8()函数用于此数据框中的所有列,但我仍然遇到错误。我在数据框本身上使用了substr()函数,它向我展示了每列的第一个n字符,但我没有看到输出中有任何明显的问题。

我甚至继续使用install.packages()函数再次重新下载openxlsx包,以防任何更新。

有谁知道如何确定错误的原因?这是函数,因为它写在包中?如果问题在于数据本身的编码,那么enc2utf8()不足以解决问题吗?

谢谢!

答案

我刚遇到同样的问题。在此question的基础上,您可以使用以下任一方法替换数据框中的所有错误字符:

library(dplyr)
df %>%
  mutate_if(is.character, ~gsub('[^ -~]', '', .))

仅适用于字符列,或:

df %>%
  mutate_all(~gsub('[^ -~]', '', .))  

对于所有列,然后使用write.xlsx()导出到XLSX。

以上是关于write.xlsx的编码问题(openxlsx)的主要内容,如果未能解决你的问题,请参考以下文章

使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护

为啥我不能使用 write.xlsx 追加 [重复]

r语言write.xlsx在哪个包

使用write.xlsx将数据框写入R中的excel时如何以粗体打印顶行

R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称将数据写入Excel文件新的表单(sheet)中将文件保存为xls文件格式(而不是xlsx)

openxlsx 货币风格 - 有舍入选项吗?