2012-12-22 12 views
6

に番号ではありません何かを変換し、similifiedバージョンは以下の通りです:私は、データのベクトルを持っている空白

x <- c("1234123xcv?","12341534xxx.","hello","goodbye") 

私がやりたい何か、それは次のように返しています:

"1234123" "12341534" "" "" 

私はこのようなことができることを知っています。私は手動で大文字と小文字を区別し、特殊文字はいくつか指定しています。

grep("[A-Za-z\\?\\.]",x,value=TRUE) 

しかし、必ずしも数字ではない「その他」のフィールドには何が入っているのか分かりません。

これを念頭に置いて、私の質問は次のとおりです。gsub()で返される数字だけを指定する方法はありますか?あなたはこのような何か必要

+0

数字または数字? 「-1」は数字であり、「3.14」と同様に「1.2E07」である。 – Spacedman

+0

私の場合、それはちょうど数字です。私は(信じて)私はそのような書式設定された私のデータ内の任意の数値がありません。上の例のパターンによく似ています。 –

答えて

11
gsub("\\D","",x) # yada yada yada 
3

[^0-9]* 

をこれは、どの文字を指定する必要が数字ではないものと一致しません。

5

括弧の中には、^が含まれていません。だから、これは[\ D]を使用でき

> gsub("[^0-9]", "", x) 
[1] "1234123" "12341534" ""   "" 
4
gsub("[^[:digit:]]", "", x) #...... 
0

"" と番号ではありません何でも交換してくださいと言います。数字だけを返します。

+1

Er ,,,,,これはR. –

+0

です。1つの要素がある場合は[]は必要ありませんが、何をする必要がありますか? 2. \をエスケープする必要があります。 –

2

私が言う

gsub("[^0-9]+", "", x) 

[^ 0-9]一度に一つだけの文字と速くなります[^ 0-9] + 1以上に置き換えられます。

+0

False。私の答えに出力を見てください。これは、数値ではないすべてのものを '' "'で置き換えるというものです。 '+'は不要です。 – GSee

+0

@Gsee、私は彼があなたのバージョンが間違っていると言っていたとは思わない。ちょうど彼のバージョンでは、一度に任意の連続した非数字を置き換えることによって、より少ない置換を行うでしょう。同じ結果。彼はそれがもっと速くこのようにできると主張することさえできました...とにかく、それをコメントに入れても私の意見では良いでしょう。 @flodel。 – flodel

+0

いい視点ね。 w_gにはまだコメントを残すのに十分な担当者がいません。私は私がunvortをすることができるように編集します。 – GSee

関連する問題