GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen von Rdata-Dateien mit unterschiedlicher Kodierung

Dank des Kommentars von 42 ist es mir gelungen, eine Funktion zum Umcodieren der Datei zu schreiben:

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

Das Fleisch hier ist der Befehl Encoding(df[, col]) <- "latin1" , die Spalte col benötigt des Datenrahmens df und konvertiert es in das latin1-Format. Leider Encoding Nimmt nur Spaltenobjekte als Eingabe, also musste ich eine Funktion erstellen, um alle Spalten eines Datenrahmenobjekts zu durchsuchen und die Transformation anzuwenden.

Wenn sich Ihr Problem natürlich nur auf ein paar Spalten bezieht, ist es besser, einfach den Encoding anzuwenden zu diesen Spalten anstelle des gesamten Datenrahmens (Sie können die obige Funktion ändern, um eine Reihe von Spalten als Eingabe zu verwenden). Auch wenn Sie mit dem umgekehrten Problem konfrontiert sind, d. h. ein in Linux oder Mac OS erstelltes R-Objekt in Windows einzulesen, sollten Sie originalEncoding = "UTF-8" verwenden .


Vielen Dank, dass Sie dies gepostet haben. Ich habe mir die Freiheit genommen, Ihre Funktion zu ändern, falls Sie einen Datenrahmen mit einigen Spalten als Zeichen und einigen als Nicht-Zeichen haben. Andernfalls tritt ein Fehler auf:

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

Hier ist also die modifizierte Funktion:

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)
}

Dies ändert jedoch nicht die Kodierung der Ebenennamen in einer "Faktor"-Spalte. Glücklicherweise habe ich festgestellt, dass dies alle Faktoren in Ihrem Datenrahmen in Zeichen umwandelt (was vielleicht nicht der beste Ansatz ist, aber in meinem Fall war es das, was ich brauchte):

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

In Anlehnung an frühere Antworten ist dies ein kleines Update, mit dem es an Faktoren und dplyr's Tibble funktioniert. Danke für die Inspiration.

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. Dateien durch Lesen ihrer Dateinamen in verschiedene Verzeichnisse verschieben?

  2. Newline durch Nul ersetzen?

  3. Lesen von Zeilen aus einer Datei mit Bash:Für Vs. Während?

  4. Lesen von Grep-Mustern aus einer Datei?

  5. Dateiberechtigungen unter Linux mit Beispiel

Linux-Tail-Befehl mit Beispielen

Linux-WC-Befehl mit Beispielen

Digitale Signaturen mit GnuPG

Kodierung einer Zip-Datei?

Warnung mit nftw

Plotten Sie die .gnu-Datei mit gnuplot