Rに読み込んで.rdata
形式のパッケージ/データフォルダーに含めるcsv
ファイルがたくさんあります。残念ながら、データ内の非ASCII文字はチェックに失敗します。 tools
パッケージには、非ASCII文字(showNonASCII
とshowNonASCIIfile
)をチェックする2つの関数がありますが、それらを削除/クリーニングするための1つを見つけることができないようです。
他のUNIXツールを調べる前に、これをすべてRで実行して、生データから最終製品までの完全なワークフローを維持できるようにすることをお勧めします。非ASCII文字を取り除くのに役立つ既存のパッケージ/関数はありますか?
単純に削除非ASCII文字にするには、ベース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"
locate 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パッケージを使用するのが少し良いアプローチです。これにより、元のテキストを可能な限り保存できます。
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"
ASCII以外の文字を含むすべての単語を削除するには(@Hadleyからコードを借りる)、xfun
からfilter
のパッケージdplyr
を使用できます。
x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher", "alex")
x
x %>%
tibble(name = .) %>%
filter(xfun::is_ascii(name)== T)