GNU/Linux >> Belajar Linux >  >> Linux

Membaca file Rdata dengan penyandian berbeda

Berkat komentar 42, saya berhasil menulis fungsi untuk mengode ulang file:

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

Daging disini adalah perintah Encoding(df[, col]) <- "latin1" , yang mengambil kolom col kerangka data df dan mengubahnya menjadi format latin1. Sayangnya, Encoding hanya mengambil objek kolom sebagai input, jadi saya harus membuat fungsi untuk menyapu semua kolom objek kerangka data dan menerapkan transformasi.

Tentu saja, jika masalah Anda hanya pada beberapa kolom, lebih baik Anda menerapkan Encoding saja ke kolom tersebut alih-alih seluruh kerangka data (Anda dapat memodifikasi fungsi di atas untuk mengambil satu set kolom sebagai input). Juga, jika Anda menghadapi masalah terbalik, yaitu membaca objek R yang dibuat di Linux atau Mac OS ke Windows, Anda harus menggunakan originalEncoding = "UTF-8" .


Terima kasih telah memposting ini. Saya mengambil kebebasan untuk memodifikasi fungsi Anda jika Anda memiliki kerangka data dengan beberapa kolom sebagai karakter dan beberapa sebagai non-karakter. Jika tidak, terjadi kesalahan:

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

Jadi inilah fungsi yang dimodifikasi:

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

Namun, ini tidak akan mengubah pengkodean nama level di kolom "faktor". Untungnya, saya menemukan ini untuk mengubah semua faktor dalam kerangka data Anda menjadi karakter (yang mungkin bukan pendekatan terbaik, tetapi dalam kasus saya itulah yang saya butuhkan):

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

menindaklanjuti jawaban sebelumnya, ini adalah pembaruan kecil yang membuatnya berfungsi pada faktor dan tibble dplyr. Terima kasih untuk inspirasi.

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. Pindahkan File Dengan Membaca Nama File Mereka Ke Direktori Berbeda?

  2. Ganti Baris Baru Dengan Nul?

  3. Encoding File Zip?

  1. Membaca file CSV dengan kueri SQL dari linux shell

  2. Bagaimana install -c berbeda dari cp

  3. tar -C dengan pola file wildcard

  1. Bagaimana cara mengisi file dengan FF menggunakan dd?

  2. Plot file .gnu dengan gnuplot

  3. Apakah mv dengan wildcard masih atomik