我对R中的inconsistent encoding of character vector有问题.

我从中读取表格的文本文件在UTF-8中进行了编码(通过Notepad++)(我也try 了UTF-8 without BOM).

我想从这个文本文件中读取表格,将其转换为data.table,设置key并使用二进制搜索.当我试图这么做时,出现了以下情况:

警告信息:

和二进制搜索does not work.

我意识到我的data.table-key专栏包含"未知"和"UTF-8"两种编码类型:

> table(Encoding(poli.dt$word))
unknown   UTF-8 
2061312 2739122 

我try 使用以下工具转换此列(在创建data.table对象之前):

  • Encoding(word) <- "UTF-8"
  • word<- enc2utf8(word)

但没有效果.

我还try 了几种将文件读入R的不同方法(设置所有有用的参数,例如encoding = "UTF-8"):

  • data.table::fread
  • utils::read.table
  • base::scan
  • colbycol::cbc.read.table

但没有效果.

==================================================

我的R版本:

> R.version
           _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          0.3                         
year           2014                        
month          03                          
day            06                          
svn rev        65126                       
language       R                           
version.string R version 3.0.3 (2014-03-06)
nickname       Warm Puppy  

我的会话信息:

> sessionInfo()
R version 3.0.3 (2014-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Polish_Poland.1250  LC_CTYPE=Polish_Poland.1250                LC_MONETARY=Polish_Poland.1250
[4] LC_NUMERIC=C                   LC_TIME=Polish_Poland.1250    

base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.2 colbycol_0.8     filehash_2.2-2   rJava_0.9-6     

loaded via a namespace (and not attached):
[1] plyr_1.8.1     Rcpp_0.11.1    reshape2_1.2.2 stringr_0.6.2  tools_3.0.3   

推荐答案

如果字符串有"本机编码"标记(本例中是CP-1250)或是ASCII,则Encoding函数返回unknown.

library(stringi)
stri_enc_mark(poli.dt$w或d)

要判断每个字符串是否为有效的UTF-8字节序列,请调用:

all(stri_enc_isutf8(poli.dt$w或d))

如果不是这样,你的文件肯定不是UTF-8格式的.

我怀疑您没有在数据读取函数中强制使用UTF-8模式(try 判断poli.dt$w或d的内容以验证此语句).如果我的猜测是真的,试试:

read.csv2(file("filename", encoding="UTF-8"))

poli.dt$w或d <- stri_encode(poli.dt$w或d, "", "UTF-8") # re-mark encodings

如果data.table仍然抱怨"混合"编码,您可能需要对非ASCII字符进行音译,例如:

stri_trans_general("Zażółć gęślą jaźń", "Latin-ASCII")
## [1] "Zazolc gesla jazn"

R相关问答推荐

R绑定具有不同时间观察的两个数据帧

是否可以通过另一个DF的内容过滤数据帧列表?

pdf Quarto中的中心美人鱼

棒棒糖图表大小和线宽参数故障标签未出现

卸载安装了BRM的模型发出的警告

编码变量a、b、c以匹配来自另一个数据点的变量x

任意列的欧几里得距离

使用ggsankey调整Sankey图中单个 node 上的标签

如何调整曲线图中的y轴标签?

根据文本字符串中的值粘贴新列

如何在观测缺失的地方添加零

使用较长的查询提取具有部分匹配的列表中的较短目标,

可以替代与NSE一起使用的‘any_of()’吗?

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

从多个线性回归模型中提取系数

用R ggplot2求上、下三角形中两个变量的矩阵热图

列名具有特殊字符时的循环回归

在R中,如何将误差条放置在堆叠的每个条上?

Rmarkdown::Render vs Source()

R:使用ApexCharge更改标签在饼图中的位置