web-dev-qa-db-ja.com

Rの文字列からすべての特殊文字を削除しますか?

Rの文字列からすべての特殊文字を削除し、それらをスペースに置き換える方法は?

削除する特殊文字は次のとおりです:~!@#$%^&*(){}_+:"<>?,./;'[]-=

[:punct:]パターンでregexを試しましたが、句読点のみを削除します。

質問2:â í ü Â á ą ę ś ćなどの外国語から文字を削除する方法

回答:[^[:alnum:]]を使用してremove~!@#$%^&*(){}_+:"<>?,./;'[]-=を使用し、[^a-zA-Z0-9]を使用してregexまたはregexpr関数のâ í ü Â á ą ę ś ćも削除します。

86
Qbik

正規表現 を使用して、不要な文字を識別する必要があります。最も読みやすいコードには、 stringr パッケージの str_replace_all が必要ですが、ベースRの gsub も同様に機能します。

正確な正規表現は、何をしようとしているかによって異なります。質問で指定した特定の文字を削除することもできますが、すべての句読点文字を削除する方がはるかに簡単です。

x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")

(ベースRに相当するものはgsub("[[:punct:]]", " ", x)です。)

別の方法は、すべての非英数字を交換することです。

str_replace_all(x, "[^[:alnum:]]", " ")

文字、数字、または句読点を構成するものの定義は、ロケールによってわずかに異なるため、希望するものを正確に取得するには少し実験する必要がある場合があることに注意してください。

155
Richie Cotton

正規表現を使用してこれらの「クレイジーな」文字を削除する代わりに、ASCIIに変換するだけで、アクセントは削除されますが、文字は保持されます。

編集:コメントで記憶されているように、元の文字列の開始エンコーディングを宣言する必要があるかもしれません。通常はUTF-8です

astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')

結果として

[1] "Abcdeacoauu"
21

特殊文字をアポストロフィに変換し、

Data  <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)

以下のコードで余分な '' 'アポストロフィを削除します

Data <- gsub("''","" , Data ,ignore.case = TRUE)

gsub(..)関数を使用して、特殊文字をアポストロフィに置き換えます

4
UMESH NITNAWARE