Запись объекта data.fame из латиницы 1 в utf-8

Я работаю с Windows 7 (моя система: "LC_COLLATE=French_France.1252) с данными с акцентами.
Мои данные закодированы в ANSI, что позволяет мне правильно их визуализировать на вкладках Rstudio.

Моя проблема: когда я хочу создать страницу GoogleVis (кодировка utf-8), акцентированные символы отображаются неправильно.

Что я ожидал: я хочу преобразовать свои латинские Data.frames в utf-8 с помощью R непосредственно перед созданием страниц googleVis. У меня нет идей. Пакет Stringi работает только с необработанными данными.

fr <- data.frame(âge = c(15,20), prénom = c("Adélia", "Adão"), row.names = c("I1", "I2"))

print (fr)

library (googleVis)

test <- gvisTable(fr)
plot(fr)

реальные данные https://drive.google.com/open?id=0B91cr4hfMXV4OEkzWk1aWlhvR0E введите описание изображения здесь

# importing (historical data)
test_ansi<-read.table("databig_ansi.csv",
                header=TRUE, sep=",",
                na.strings="",
                quote = "\"",
                dec=".") 

# subsetting 
library (dplyr)
test_ansi <- 
   test_ansi %>%
   count(ownera)

# library (stringi)

  stri_enc_detect(test_ansi$ownera)

# visualisation
library (googleVis)

testvis <- gvisTable(test_ansi)
plot(testvis)

1 ответ

В нескольких пакетах есть встроенные функции, такие как stringi, stringr, SoundexBR, tau, а также преобразование символов в базовой системе R, которое можно использовать как:

text2 <- iconv(text, from = "latin1", to = "UTF-8")

Вам также может потребоваться более конкретная функция с некоторыми проверками факторов, например:

.fromto <- function (x, from, to)
{
    if (is.list(x)) {
    xattr <- attributes(x)
    x <- lapply(x, .fromto, from, to)
    attributes(x) <- xattr
    } else {
    if (is.factor(x)) {
        levels(x) <- iconv(levels(x), from, to, sub = "byte")
    } else {
        if (is.character(x))
        x <- iconv(x, from, to, sub = "byte")
    }
    lb <- attr(x, "label")
    if (length(lb) > 0) {
        attr(x, "label") <- iconv(attr(x, "label"), from, to, sub = "byte")
    }
    }
    x
}

# This will convert a vector from any encoding into UTF-8
Latin2UTF8 <- function (x, from = "WINDOWS-1252")
{
    .fromto(x, from, "UTF-8")
} 

Тогда вы просто используете его как:

Latin2UTF8(fr)
 âge prénom
I1  15 Adélia
I2  20   Adão

Дополнительные правки после дополнительной информации и данных

Вот как мой R настроен. My R по умолчанию работает на языке UTF-8 и английском языке. Как только моя системная среда отличается от предоставленной кодировки файлов, я буду использовать fileEncoding = "LATIN1", Это все.

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"


test_ansi<-read.table(file.choose(),
                       header=TRUE, sep=",",
                       na.strings="",
                        quote = "\"",
                        dec=".", fileEncoding = "LATIN1")

> test_ansi2 <- 
+     test_ansi %>%
+     count(ownera)
> test_ansi2
Source: local data frame [6,482 x 2]

                ownera n
1       Abautret (Vve) 1
2              Abazuza 1
3            Abernathy 1
4  Abrahamsen, Heerman 1
5  Abrahamsen, Hereman 6
6   Abrahamsz, Heerman 2
7         Abram, Ralph 8
8      Abrams, Heerman 2
9            Abranches 1
10               Abreu 1
..                 ... .

# visualisation
library (googleVis)


testvis <- gvisTable(test_ansi)
plot(testvis)

Ссылка на созданную таблицу

Таблица

Другие вопросы по тегам