GNU/Linux >> Linux の 問題 >  >> Linux

エンコーディングが異なる Rdata ファイルの読み取り

42 さんのコメントのおかげで、ファイルを再コード化する関数を書くことができました:

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

ここで重要なのはコマンド Encoding(df[, col]) <- "latin1" です 、列 col を取ります データフレーム df の latin1 形式に変換します。残念ながら、Encoding 列オブジェクトのみを入力として受け取るため、データフレーム オブジェクトのすべての列をスイープして変換を適用する関数を作成する必要がありました。

もちろん、問題が数列だけにある場合は、Encoding を適用したほうがよいでしょう。 データフレーム全体ではなく、それらの列に変換します (上記の関数を変更して、一連の列を入力として受け取ることができます)。また、逆の問題、つまり Linux または Mac OS で作成された R オブジェクトを Windows に読み込む場合は、 originalEncoding = "UTF-8" を使用する必要があります。 .


これを投稿していただきありがとうございます。一部の列が文字で、一部が非文字のデータフレームがある場合に備えて、自由に関数を変更しました。そうしないと、エラーが発生します:

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

変更された関数は次のとおりです:

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

ただし、これは「因子」列のレベル名のエンコーディングを変更しません。幸いなことに、これによりデータフレームのすべての要素が文字に変更されることがわかりました (これは最善のアプローチではないかもしれませんが、私の場合はそれが必要でした):

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

以前の回答をフォローアップします。これは、要因と dplyr の tibble で動作するようにするマイナー アップデートです。インスピレーションをありがとう。

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. ファイル名を別のディレクトリに読み取ってファイルを移動しますか?

  2. 改行をNulに置き換えますか?

  3. Zipファイルのエンコード?

  1. Git でファイルのアクセス許可を保持する

  2. Linuxで区切り文字が異なるテキストファイルから列を抽出する

  3. LinuxシェルからのSQLクエリを含むCSVファイルの読み取り

  1. Bashを使用してファイルから行を読み取る:対その間?

  2. ワイルドカード ファイル パターンを指定した tar -C

  3. ddを使用してFFでファイルをパディングする方法は?