10

Linux (UTF-8) マシンで読み取る .RData ファイルがありますが、Windows で自分で作成したため、ファイルが Latin1 であることはわかっています。残念ながら、元のファイルや Windows マシンにアクセスできないため、Linux マシンでこれらのファイルを読み取る必要があります。

Rdata ファイルを読み取る通常の手順は、 を実行することload("file.Rdata")です。などの関数にread.csvは、encodingそのような問題を解決するために使用できる引数がありますが、そのloadようなものはありません。を試してみるとload("file.Rdata", encoding = latin1)、次の(予想される)エラーが発生します。

load("file.Rdata", encoding = "latin1") のエラー: 未使用の引数 (encoding = "latin1")

他に何ができますか?私のファイルは、UTF-8 環境で開くと破損するアクセントを含むテキスト変数でロードされます。

4

4 に答える 4

2

以前の回答をフォローアップします。これは、要因と 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))
}
于 2016-11-08T02:28:59.880 に答える
1

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

> 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)
于 2016-10-21T07:38:50.983 に答える