web-dev-qa-db-ja.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()は問題を解決するのに十分ではありませんか?

ありがとう!

7
im2wddrf

私はこれと同じ問題を抱えていました。これに基づいて 質問 、データフレーム内のすべての不良文字を次のいずれかに置き換えることができます。

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

文字列のみ、または:

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

すべての列に対して、write.xlsx()を使用してXLSXにエクスポートします。

8
sbha