GNU/Linux >> Tutoriels Linux >  >> Linux

Lecture du fichier Rdata avec un encodage différent

Grâce au commentaire de 42, j'ai réussi à écrire une fonction pour recoder le fichier :

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

La viande ici est la commande Encoding(df[, col]) <- "latin1" , qui prend la colonne col de dataframe df et le convertit au format latin1. Malheureusement, Encoding ne prend que des objets de colonne en entrée, j'ai donc dû créer une fonction pour balayer toutes les colonnes d'un objet dataframe et appliquer la transformation.

Bien sûr, si votre problème ne concerne que quelques colonnes, vous feriez mieux d'appliquer simplement le Encoding à ces colonnes au lieu de la trame de données entière (vous pouvez modifier la fonction ci-dessus pour prendre un ensemble de colonnes en entrée). De plus, si vous êtes confronté au problème inverse, c'est-à-dire lire un objet R créé sous Linux ou Mac OS dans Windows, vous devez utiliser originalEncoding = "UTF-8" .


Merci d'avoir posté ceci. J'ai pris la liberté de modifier votre fonction au cas où vous auriez une base de données avec des colonnes en tant que caractère et d'autres en tant que non-caractère. Sinon, une erreur se produit :

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

Voici donc la fonction modifiée :

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

Cependant, cela ne changera pas l'encodage des noms de niveau dans une colonne "facteur". Heureusement, j'ai trouvé cela pour changer tous les facteurs de votre dataframe en caractère (ce qui n'est peut-être pas la meilleure approche, mais dans mon cas, c'est ce dont j'avais besoin) :

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

suite aux réponses précédentes, il s'agit d'une mise à jour mineure qui le fait fonctionner sur les facteurs et le tibble de dplyr. Merci pour l'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. Déplacer des fichiers en lisant leurs noms de fichiers vers différents répertoires ?

  2. Remplacer la nouvelle ligne par Nul ?

  3. Encodage d'un fichier Zip ?

  4. Autorisations de fichiers sous Linux avec exemple

  5. Tracer le fichier .gnu avec gnuplot

Commande Linux Tail avec exemples

Commande Linux WC avec exemples

Démarrer avec ls

Signatures numériques avec GnuPG

tar -C avec un modèle de fichier générique

Comment remplir un fichier avec FF en utilisant dd ?