将编码应用于整个Data.Table

时间:2014-06-30 14:53:11

标签: r encoding dataframe data.table

我将以下文件读入data.table,如下所示:

raw <- fread("avito_train.tsv", nrows=1000)

然后,如果我像这样更改特定列和行的编码:

Encoding(raw$title[2]) <- "UTF-8"

效果很好。

但是,如何将编码应用于所有列和所有行?

我检查了fread文档,但似乎没有任何编码选项。此外,我尝试Encoding(raw),但这给了我一个错误(预期的字符向量参数)。

编辑:本文详细介绍了有关Windows上的RStudio中的外国文本的更多信息http://quantifyingmemory.blogspot.com/2013/01/r-and-foreign-characters.html

3 个答案:

答案 0 :(得分:4)

我试过了:

Encoding(raw$title) <- "UTF-8"

设置整个列的编码。那现在可行。仍然对任何其他选项开放,因此它会在导入时自动执行此操作。

答案 1 :(得分:4)

最近在data.table,v1.9.5的devel版本中实现了这一点。这很快就会被推到CRAN(如v1.9.6)。你能不能试试devel版本,看看能解决这个问题吗?

fread()已获得encoding参数,专门针对Windows的问题。

require(data.table) # v1.9.5+
fread("file.txt", encoding="UTF-8")

应该解决问题。没有文件供我测试。如果它无法解决您的问题,请在项目页面上提交一个问题,并附带可重现的示例/文件。

答案 2 :(得分:3)

可悲的是,在使用fread导入(还)时,似乎没有办法做到这一点。

虽然您似乎已经弄明白了,但我会在导入后发布一种设置整个dt编码的方法。

完成任务的一种方法是将其循环遍历数据表中的所有字符列:

for (name in colnames(raw[,sapply(raw, is.character), with=F])){
  Encoding(raw[[name]]) <- "UTF-8"}

colnames ... bit首先获取字符列( with = F 似乎是dt所必需的),然后获取一个将循环的列名。简而言之:这为用户提供了已经找到的工作,但是在所有char列中都有用。

现在......因为不能保证你的整数,花车等的名字不需要一些按摩,所以下面应该解决它:

for (name in colnames(raw)){
  Encoding(colnames(raw)) <- "UTF-8"
}