2017-07-10 6 views
2

データフレーム列の一連の個々の名前に対していくつかのデータクリーニングを実行しています。それぞれの名前の末尾に非アルファベット文字を削除したいと思います。上記の場合文字列の末尾から複数のアルファ以外の文字を削除する

countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$") 

、私はに国をオンにしたいと思います:私は、文字の特定のパターン(例えば、pattern = ",$")でgsub()を使用することができ

[1] "Senegal" "Canada" "Austria" "Spain" "Russia" 

が、私はどのように非常にわからないんだけど末尾の非アルファ(例えば、"Senegal1345769")が複数ある文字列に対してこれを行います。

この問題に対処するためにどのようなパターンを使用しますか?

+2

'gsub(" [^ [:alpha:]] * $ "、" "、countries)'を試すことができます。 – Scarabee

+0

'(?i)[^ a-z] + $'しかし、これはアルファベットをチェックしないことに注意してください。 – sln

+0

私はこれがうまくいくと思います、@ d.b!みんな、ありがとう。それは有り難いです。クイックサイドの質問:最初に「[^:alpha:] + $」を使用しました。なぜこれは機能しませんでしたか?ちょうどそれが何がうまくいかなかったのかのより良い感覚を得ることを試みる。 –

答えて

1

最初に試してみてください[^:alpha:]+$はほぼ正しいです。あなたは、括弧の式の中でPOSIX文字クラス([:alpha:]のような)を使うべきであることに気をつけてください。

使用

countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$") 
sub("[^[:alpha:]]+$", "", countries) 
## => [1] "Senegal" "Canada" "Austria" "Spain" "Russia" 

online R demoを参照してください。

詳細

  • [^から否定ブラケット表現
    • [:alpha:]の開始 - 手紙POSIX文字クラス...
  • ]+ - 一つ以上回
  • $ - 文字列の最後。

したがって、[^[:alpha:]]+$パターンは、文字列の末尾にある文字以外の1つ以上の文字と一致します。

この式は仕事に失敗した場合、あなたはまた、PCREのパターンを試すことがあります。

sub("(*UCP)\\P{L}+$", "", countries, perl=TRUE) 

another online R demoを参照してください。ここで

  • (*UCP) - 文字列の終わり - 手紙
  • $以外の1以上の文字 - パターンUnicodeは認識して
  • \\P{L}+になります。
関連する問題