EDIT:您提供的文件似乎使用了与系统本机不同的编码。
由以下人员完成的(实验性)编码检测stri_enc_detect
函数从stringi http://stringi.rexamine.com包给出:
library('stringi')
PlayerDataRaw <- stri_read_raw('~/Desktop/PLAYERS.csv')
stri_enc_detect(PlayerDataRaw)
## [[1]]
## [[1]]$Encoding
## [1] "ISO-8859-1" "ISO-8859-2" "ISO-8859-9" "IBM424_rtl"
##
## [[1]]$Language
## [1] "en" "ro" "tr" "he"
##
## [[1]]$Confidence
## [1] 0.25 0.14 0.09 0.02
所以该文件很可能位于ISO-8859-1
a.k.a. latin1
。幸运的是,R 在读取此文件时不必重新编码输入 - 它可能只是设置与默认(==本机)编码标记不同的编码标记。您可以使用以下命令加载文件:
PlayerData<-read.table('~/Desktop/PLAYERS.csv',
quote=NULL, dec = ".", sep=",",
stringsAsFactors=FALSE, header=TRUE, fill=TRUE,
blank.lines.skip=TRUE, encoding='latin1')
现在您可以正确访问单个字符,例如与stri_sub
功能:
Test<-PlayerData[c(33655:33656),]
Test
## T Away H.A Home Player Year
## 33655 33654 CrystalPalace 1 Arsenal Cazorla 2013
## 33656 33655 CrystalPalace 1 Arsenal Özil 2013
stri_sub(Test$Player, 1, length=1)
## [1] "C" "Ö"
stri_sub(Test$Player, 2, length=1)
## [1] "a" "z"
根据比较字符串,以下是字符串相等性测试的结果,其中重音字符“扁平化”:
stri_cmp_eq("Özil", "Ozil", stri_opts_collator(strength=1))
## [1] TRUE
您还可以通过使用摆脱重音字符iconv
的音译器(不过我不确定它是否在 Windows 上可用)。
iconv(Test$Player, 'latin1', 'ASCII//TRANSLIT')
## [1] "Cazorla" "Ozil"
或者使用非常强大的音译器stringi http://stringi.rexamine.com包(字符串版本 >= 0.2-2):
stri_trans_general(Test$Player, 'Latin-ASCII')
## [1] "Cazorla" "Ozil"