我有一个data.table基础.我在这个data.table中有一个术语列
class(base$term)
[1] character
length(base$term)
[1] 27486
Run Code Online (Sandbox Code Playgroud)
我可以从字符串中删除重音符号.我能够从字符串向量中删除重音符号.
iconv("Millésime",to="ASCII//TRANSLIT")
[1] "Millesime"
iconv(c("Millésime","boulangère"),to="ASCII//TRANSLIT")
[1] "Millesime" "boulangere"
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,当我在我的术语列上应用相同的功能时,它不起作用
base$terme[2]
[1] "Millésime"
iconv(base$terme[2],to="ASCII//TRANSLIT")
[1] "MillACsime"
Run Code Online (Sandbox Code Playgroud)
有谁知道这里发生了什么?
han*_*ick 16
好的解决问题的方法:
Encoding(base$terme[2])
[1] "UTF-8"
iconv(base$terme[2],from="UTF-8",to="ASCII//TRANSLIT")
[1] "Millesime"
Run Code Online (Sandbox Code Playgroud)
感谢@nicola
小智 14
这是针对 DataFrames 修改的 Jeldrik 解决方案的一个版本。请注意,该:=运算符在基本 R 中已被弃用。
library(stringi)\n\nbase <- data.frame(terme = c("Mill\xc3\xa9sime", \n "boulang\xc3\xa8re", \n "\xc3\xbc\xc3\xa9\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa5\xc3\xa7\xc3\xaa\xc3\xab\xc3\xa8\xc3\xaf\xc3\xae\xc3\xac"))\n\nbase$terme = stri_trans_general(str = base$terme, id = "Latin-ASCII")\nRun Code Online (Sandbox Code Playgroud)\n
使用stringi包可能会更容易。这样,您无需事先检查编码。此外,stringi在操作系统之间是一致的,但不是一致的inconv。
library(stringi)
base <- data.table(terme = c("Millésime",
"boulangère",
"üéâäàåçêëèïîì"))
base[, terme := stri_trans_general(str = terme,
id = "Latin-ASCII")]
> base
terme
1: Millesime
2: boulangere
3: ueaaaaceeeiii
Run Code Online (Sandbox Code Playgroud)