2012-04-24 13 views
59

Rの特定の文字列内のすべての特殊文字を削除し、各特殊文字をスペースで置き換えるにはどうすればよいですか?Rの文字列からすべての特殊文字を削除しますか?

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

regex [:punct:]は仕事の半分を行うことになるだろう。

質問2:しかし、これらの文字を外国語から削除するには:â í ü Â á ą ę ś ć

ANSWER_2:regexregexpr[^a-zA-Z0-9][^[:alnum:]]を置き換えます
regex[^a-zA-Z0-9]

+4

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

+0

私自身の定義は、Unicodeではないすべての文字です;-)。しかし、私は多くの他の人々が同意しないだろうと思う。 – Joey

+0

'sub'や' gsub'関数を見てみることもできます。 –

答えて

116

あなたは、不要な文字を識別するためにregular expressionsを使用する必要があります。最も簡単に読めるコードの場合はstringrパッケージのstr_replace_allが必要ですが、ベースRのgsubも同様です。

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

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

(基R当量gsub("[[:punct:]]", " ", x)ある。)

代替は、すべての非英数字をスワップアウトすることです。

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

文字または数字またはpunctuatutionマークを構成するものの定義は少しロケールにより変動しますので、あなたは正確に何をしたい得るために少し実験する必要があるかもしれないことに注意してください。

+6

nice答え+1 '' 'を' '' 'に置き換えたい場合は、文字列の空白が空白になります。 –

+4

@TylerRinker:QBikはスペースを特に要求しましたが、Trueです。 –

+2

よろしくお願いします。 –

4

regexを使用してこれらの「クレイジー」文字を削除する代わりに、ASCIIに変換するだけで、アクセントを削除して文字を維持できます。アポストロフィする特殊文字を変換し

[1] "Abcdeacoauu" 
0

になり

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

、それは '' 余分に除去するためのコードの下に

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

」アポストロフィ

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

使用gsub(..)関数 特殊文字をアポストロフィと置き換える場合

関連する問題