GNU/Linux >> Linux Esercitazione >  >> Linux

Lettura di file Rdata con codifica diversa

Grazie al commento di 42, sono riuscito a scrivere una funzione per ricodificare il file:

fix.encoding <- function(df, originalEncoding = "latin1") {
  numCols <- ncol(df)
  for (col in 1:numCols) Encoding(df[, col]) <- originalEncoding
  return(df)
}

La carne qui è il comando Encoding(df[, col]) <- "latin1" , che prende la colonna col del frame di dati df e lo converte in formato latin1. Sfortunatamente, Encoding accetta solo oggetti colonna come input, quindi ho dovuto creare una funzione per eseguire lo sweep di tutte le colonne di un oggetto dataframe e applicare la trasformazione.

Ovviamente, se il tuo problema si trova solo in un paio di colonne, è meglio applicare solo il Encoding a quelle colonne invece dell'intero dataframe (puoi modificare la funzione sopra per prendere un insieme di colonne come input). Inoltre, se stai affrontando il problema inverso, cioè leggendo un oggetto R creato in Linux o Mac OS in Windows, dovresti usare originalEncoding = "UTF-8" .


grazie per aver postato questo. Mi sono preso la libertà di modificare la tua funzione nel caso tu abbia un dataframe con alcune colonne come carattere e altre come non carattere. In caso contrario, si verifica un errore:

> fix.encoding(adress)
Error in `Encoding<-`(`*tmp*`, value = "latin1") :
 a character vector argument expected

Quindi ecco la funzione modificata:

fix.encoding <- function(df, originalEncoding = "latin1") {
    numCols <- ncol(df)
    for (col in 1:numCols)
            if(class(df[, col]) == "character"){
                    Encoding(df[, col]) <- originalEncoding
            }
    return(df)
}

Tuttavia, questo non cambierà la codifica dei nomi dei livelli in una colonna "fattore". Fortunatamente, ho trovato questo per cambiare tutti i fattori nel tuo dataframe in carattere (che potrebbe non essere l'approccio migliore, ma nel mio caso è quello di cui avevo bisogno):

i <- sapply(df, is.factor)
df[i] <- lapply(df[i], as.character)

seguendo le risposte precedenti, questo è un aggiornamento minore che lo fa funzionare su fattori e tibble di dplyr. Grazie per l'ispirazione.

fix.encoding <- function(df, originalEncoding = "UTF-8") {
numCols <- ncol(df)
df <- data.frame(df)
for (col in 1:numCols)
{
        if(class(df[, col]) == "character"){
                Encoding(df[, col]) <- originalEncoding
        }

        if(class(df[, col]) == "factor"){
                        Encoding(levels(df[, col])) <- originalEncoding
}
}
return(as_data_frame(df))
}

Linux
  1. Spostare i file leggendo i loro nomi di file in directory diverse?

  2. Sostituire Newline con Nul?

  3. Lettura di righe da un file con Bash:per vs. Mentre?

  4. Leggere i modelli Grep da un file?

  5. Avviso con nftw

Comando Tail Linux con esempi

Comando Linux WC con esempi

Iniziare con ls

Firme digitali con GnuPG

Estrazione di colonne da file di testo con delimitatori diversi in Linux

In che modo install -c è diverso da cp