【发布时间】:2014-02-27 14:34:32
【问题描述】:
使用merge 或data.table 我收到编码警告。我的过程是同胞:
- 我正在创建第一个 data.table
- 我使用
merge更新了这个data.table。
但是当我打电话给merge 时,我收到了这个警告:
Please ensure that character columns have identical encodings for joins.
如何告诉 data.table 使用的编码?我知道我可以使用 suppressWarnings 删除警告,但我更喜欢以干净的方式解决此问题。
这再现了警告:
library(data.table)
options(stringsAsFactors=FALSE)
dt = data.table(text=c('é','à','s'),
title='agstudy',hrefs='a')
setkeyv(dt,names(dt))
dt.new = data.table(text=c('é','à','h','a'),
hrefs=c(rep('a',2),rep('aa',2)),
title=c(rep('agstudy',2),rep('new',2)))
setkeyv(dt.new,names(dt.new))
merge(dt.new,dt,all=TRUE)
Warning messages:
1: In `[.data.table`(y, xkey, nomatch = ifelse(all.x, NA, 0), allow.cartesian = allow.cartesian) :
Encoding of character column 'text' in X is different from column 'text' in Y
in join X[Y]. Joins are not implemented yet for non-identical character encodings
and therefore likely to contain unexpected results for those entries.
Please ensure that character columns have identical encodings for joins.
EDIT添加一些会话信息:
sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)
[1] data.table_1.8.11
EDIT2添加一些上下文
我的 data.table 是在一些抓取之后创建的,我使用 htmlParse(...,encoding='UTF-8') 将编码设置为 UTF-8 然后我使用抓取的文本创建 data.table。
【问题讨论】:
-
我没有警告。什么给你
Encoding(dt$text)?我有"unknown" "latin1" "latin1",我的脚本使用 RStudio 保存在 UTF-8 中。 -
对不起,我运行了您的代码,但没有收到任何警告。编辑:我和维克托普有同样的特征
-
好的,我使用了 data.table_1.8.10。使用 data.table_1.8.11 我有警告。
-
data.table 版本 1.8.10,R 版本 3.1.0
-
我也可以重现这个。问题似乎是
Encoding(dt[[1]])是[1] "latin1" "latin1" "unknown",即有混合编码。但根据文档:“ASCII 字符串永远不会用声明的编码标记,因为它们的表示在所有支持的编码中都是相同的。”所以,我看不到避免警告的方法。
标签: r encoding merge data.table