Как я могу указать кодировать в fwrite () для экспорта файла CSV R? - PullRequest
0 голосов
/ 28 сентября 2018

Поскольку fwrite() не может применить аргумент кодирования , как я могу экспортировать CSV-файл в определенном кодировании так быстро, как fwrite()?(fwrite() - самая быстрая функция в моем подтверждении)

fwrite(DT,"DT.csv",encoding = "UTF-8")
Error in fwrite(DT, "DT.csv", encoding = "UTF-8") : 
  unused argument (encoding = "UTF-8")

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

На момент написания статьи fwrite не поддерживает принудительное кодирование.Есть обходной путь, который я использую, но он немного тупее, чем хотелось бы.Например:

readr::write_excel_csv(DT[,0],"DT.csv")
data.table::fwrite(DT,file = "DT.csv",append = T)

В первой строке будут сохранены только заголовки таблицы данных в CSV, по умолчанию UTF-8 с меткой порядка байтов, необходимой, чтобы Excel знал, что файл закодирован в формате UTF.-8.Затем оператор fwrite использует опцию добавления, чтобы добавить дополнительные строки в исходный CSV.Это сохраняет кодировку от write_excel_csv , при этом максимально увеличивая скорость записи.

0 голосов
/ 28 сентября 2018

Вы должны опубликовать воспроизводимый пример, но я думаю, вы могли бы сделать это, убедившись, что данные в DT находятся в UTF-8 в R, а затем установите кодировку каждого столбца на «неизвестно».R при этом будет предполагать, что данные кодируются в собственной кодировке при их записи.

Например,

DF <- data.frame(text = "á", stringsAsFactors = FALSE)
DF$text <- enc2utf8(DF$text) # Only necessary if Encoding(DF$text) isn't "UTF-8"
Encoding(DF$text) <- "unknown"
data.table::fwrite(DF, "DF.csv")

Если столбцы DF являются факторами, вам понадобитсяпреобразовать их в символьные векторы, прежде чем это сработает.

...