我将以下文件读入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
答案 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"
}