我有一堆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