我有一堆csv
文件,我正在读入R,并且包含在格式为.rdata
的包/数据文件夹中。不幸的是,数据中的非ASCII字符未通过检查。 tools
包有两个功能来检查非ASCII字符(showNonASCII
和showNonASCIIfile
),但我似乎无法找到一个删除/清除它们。删除数据文件中的非ASCII字符
在研究其他UNIX工具之前,最好在R中完成这些工作,这样我就可以维护从原始数据到最终产品的完整工作流程。是否有任何现有的软件包/函数可以帮助我摆脱非ASCII字符?
我有一堆csv
文件,我正在读入R,并且包含在格式为.rdata
的包/数据文件夹中。不幸的是,数据中的非ASCII字符未通过检查。 tools
包有两个功能来检查非ASCII字符(showNonASCII
和showNonASCIIfile
),但我似乎无法找到一个删除/清除它们。删除数据文件中的非ASCII字符
在研究其他UNIX工具之前,最好在R中完成这些工作,这样我就可以维护从原始数据到最终产品的完整工作流程。是否有任何现有的软件包/函数可以帮助我摆脱非ASCII字符?
要简单地删除非ASCII字符,您可以使用base R的iconv()
,设置sub = ""
。像这样的东西应该工作:
x <- c("Ekstr\xf8m", "J\xf6reskog", "bi\xdfchen Z\xfcrcher") # e.g. from ?iconv
Encoding(x) <- "latin1" # (just to make sure)
x
# [1] "Ekstrøm" "Jöreskog" "bißchen Zürcher"
iconv(x, "latin1", "ASCII", sub="")
# [1] "Ekstrm" "Jreskog" "bichen Zrcher"
要定位非ASCII字符,或者找到,如果有任何人在所有的文件,你可以容易适应以下思路:
## Do *any* lines contain non-ASCII characters?
any(grepl("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII")))
[1] TRUE
## Find which lines (e.g. read in by readLines()) contain non-ASCII characters
grep("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII"))
[1] 1 2 3
现在,稍微好一点的方法是使用stringi软件包,它提供了一般的unicode转换功能。这样可以尽可能地保留原文:
x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher")
x
#> [1] "Ekstrøm" "Jöreskog" "bißchen Zürcher"
stringi::stri_trans_general(x, "latin-ascii")
#> [1] "Ekstrom" "Joreskog" "bisschen Zurcher"
任何想法如何使它可以使用stringi - 'iconv(“Klinik.der Univ.zu K_ln(AA \ u0090R)”,“latin1”,“ASCII”,sub =“”)=> [1] “Klinik.der Univ.zu K_ln(AAR)”' 但是 'stringi :: stri_trans_general(“Klinik.der Univ.zu K_ln(AA \ u0090R)”,“latin-ascii”)=> [1]“ Klinik。der Univ。zu K_ln(AA \ u0090R)“' – xbsd 2017-11-13 01:27:29
尝试使用正则表达式,例如函数gsub。 Check?regexp – aatrujillob 2012-03-29 23:22:49
您知道'read.csv()'带有'encoding'参数,所以您可以处理这些参数,至少在R中?非ASCII字符有什么特别的检查失败,它是在R(如果这么张贴在这里),或外部? – smci 2016-08-12 08:02:48