从数据文件中删除非ASCII字符
我有一堆csv
文件,我正在阅读到R,包括以.rdata
格式的包/数据文件夹。 不幸的是,数据中的非ASCII字符检查失败。 tools
包有两个function来检查非ASCII字符( showNonASCII
和showNonASCIIfile
),但我似乎无法find一个删除/清理它们。
在研究其他UNIX工具之前,最好在R中完成这个工作,这样我就可以保持从原始数据到最终产品的完整工作stream程。 是否有任何现有的软件包/函数来帮助我摆脱非ASCII字符?
要简单地删除非ASCII字符,可以使用base R的iconv()
,设置sub = ""
。 像这样的东西应该工作:
x <- c("Ekstr\xf8m", "J\xf6reskog", "bi\xdfchen Z\xfcrcher") # eg 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 (eg 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转换function。 这样可以尽可能地保留原文:
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"