2014-06-30 19 views
6

Ho il seguente file in un letto data.table in questo modo:Applicare Codifica per intero Data.Table

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

Poi, se cambio la codifica di una particolare colonna e riga in questo modo:

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

Funziona perfettamente.

Ma, come posso applicare la codifica a tutte le colonne e tutte le righe?

Ho controllato la documentazione fread ma non sembra esserci alcuna opzione di codifica. Inoltre, ho provato Encoding(raw) ma questo mi dà un errore (un argomento vettore carattere previsto).

Edit: Questo articolo descrive ulteriori informazioni sul testo straniero in RStudio su Windows http://quantifyingmemory.blogspot.com/2013/01/r-and-foreign-characters.html

risposta

4

ho provato questo:

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

che imposta la codifica per l'intera colonna. Per ora funzionerà bene. Ancora aperto a qualsiasi altra opzione quindi lo farà automaticamente al momento dell'importazione.

3

Purtroppo, non sembra esserci un modo per farlo mentre si importa (ancora) con fread.

Mentre sembri averlo già capito, pubblicherò un modo per impostare la codifica dell'intero dt dopo l'importazione.

Un modo per ottenerlo fatto potrebbe essere quella di ciclo che su tutte le colonne di caratteri in una tabella di dati:

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

le colnames ... po respinge le colonne che sono caratteri (con F = è necessario per dt sembra), e quindi si ottengono i nomi delle colonne su cui si andrà in loop. In breve: questo fornisce agli utenti ciò che hai già trovato funziona, ma tra tutte le colonne char.

Ora ... perché non c'è alcuna garanzia che i colnames per i vostri numeri interi, galleggianti, ecc non avrà bisogno di un po 'di massaggio, il seguente dovrebbe risolverlo:

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

Questo è stato implementato di recente nella versione devel di data.table, v1.9.5. Questo verrà presto inviato a CRAN (come v1.9.6). Potresti per favore dare alla versione di sviluppo una prova per vedere se questo risolve questo per te?

fread() ha ottenuto un argomento encoding, in particolare per problemi con Windows.

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

dovrebbe risolvere il problema. Non ci sono file da testare per me. Se non risolve il problema, invia un problema sulla pagina del progetto, con un esempio/file riproducibile.