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


116

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

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

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

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

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


4
「特殊文字」の定義は何ですか?
kohske 2012

私自身の定義は、Unicodeにないすべての文字です;-)。しかし、私は他の多くの人々が反対するだろうと思います。
ジョーイ

たぶん、関数subgsub関数を見てください。
Paul Hiemstra

5
正規表現[:punct:]仕事の半分またはすべてを作成
Qbik 2012

回答:


196

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

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

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

(ベースRの等価物はgsub("[[:punct:]]", " ", x)です。)

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

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

文字、数字、句読点を構成するものの定義は、地域によって多少異なるため、希望どおりの結果を得るには少し実験が必要になる場合があります。


11
いい答え+1 文字列に空の空白がある" """、に置き換えたい場合があります。
タイラーリンカー、2012

8
@TylerRinker:True、ただしQBikは特にスペースを要求しました。
リッチーコットン

8
これらのクレイジーなキャラクターを削除する方法:â í ü Â á
Qbik 2012

1
正規表現について読む必要があります。私の回答のリンクから始め、次にとを読ん?regexでください?regexpr
リッチーコットン

1
またはに置き換え[^[:alnum:]]てみてください。[^a-zA-Z0-9]\\W
リッチーコットン

27

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

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

その結果

[1] "Abcdeacoauu"

私はを追加する必要がありましたがiconv(astr, from="UFT-8", to="ASCII//TRANSLIT")、それ以外の場合çは少しおもしろいフランスの文字を使用しました。
Duccio A

8

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.