Применить кодировку ко всем данным.Таблица

у меня есть следующий файл прочитать в данных.таблица такая:

raw <- fread("avito_train.tsv", nrows=1000)

затем, если я изменю кодировку определенного столбца и строки, как это:

Encoding(raw$title[2]) <- "UTF-8"

Он отлично работает.

но как я могу применить кодировку ко всем столбцам и всем строкам?

Я проверил fread документация, но, похоже, нет никакой опции кодирования. Кроме того, я пытался Encoding(raw) но это дает мне ошибку (аргумент вектора символов ожидаемый.)

Edit: эта статья содержит дополнительные сведения об иностранном тексте в RStudio в Windows http://quantifyingmemory.blogspot.com/2013/01/r-and-foreign-characters.html

3 ответов


Я попытался это:

Encoding(raw$title) <- "UTF-8"

, который устанавливает кодировку для всего столбца. Пока все будет в порядке. Все еще открыт для других вариантов, поэтому он будет делать это автоматически при импорте.


Это было недавно реализовано в версии данных devel.стол, В1.9.5. Это скоро будет подтолкнуто к CRAN (как v1.9.6). Не могли бы вы дать версии devel попробовать, чтобы увидеть, если это решает это для вас?

fread() приобрел encoding аргумент, особенно для проблем с windows.

require(data.table) # v1.9.5+
fread("file.txt", encoding="UTF-8")

должен решить проблему. У меня нет файла для проверки. Если это не решит вашу проблему, пожалуйста, напишите вопрос на странице проекта с воспроизводимым файл примера.


к сожалению, кажется, что нет способа сделать это при импорте (пока) с fread.

хотя вы, похоже, уже поняли это, я опубликую способ установки кодировки всего dt после импорта.

один из способов сделать это-зациклить это на всех столбцах символов в таблице данных:

for (name in colnames(raw[,sapply(raw, is.character), with=F])){
  Encoding(raw[[name]]) <- "UTF-8"}

в colnames... бит сначала получает столбцы, которые являются символами (С=F быть необходимым для dt кажется), и затем один получает имена столбцов, которые он будет цикл над. Короче говоря: это дает пользователям то, что вы уже нашли, работает, но во всех столбцах char.

сейчас ... поскольку нет гарантии, что имена colnames для ваших целых чисел, поплавков и т. д. не потребуют некоторого массажа, следующее должно решить его:

for (name in colnames(raw)){
  Encoding(colnames(raw)) <- "UTF-8"
}