一尘不染

读取具有不同编码的Rdata文件

linux

我在Linux(UTF-8)计算机上有一个要读取的.RData文件,但我知道该文件位于Latin1中,因为我是在Windows上自己创建的。不幸的是,我无权访问原始文件或Windows计算机,并且需要在Linux计算机上读取这些文件。

要读取Rdata文件,通常的过程是运行load("file.Rdata")。诸如此类的函数read.csv具有encoding可用于解决此类问题的参数,但load没有这种功能。如果尝试load("file.Rdata", encoding = latin1),我只会收到此(预期)错误:

加载错误(“ file.Rdata”,编码=“ latin1”):未使用的参数(编码=“ latin1”)

我还可以做些什么?我的文件加载了带有重音的文本变量,这些重音在UTF-8环境中打开时会损坏。


阅读 473

收藏
2020-06-07

共1个答案

一尘不染

感谢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"

2020-06-07