2016-08-31 8 views
2

数字だけで構成する列がありますが、そこに文字やその他の記号もあります。 RはキャラクターとしてHousenumberの機能を見る。例えば文字列で構成される行を削除する

Housenumber 
1 
14 
5 
at5 
53.! 
boat 

は私が数字のみで構成されていないと、それらを削除する行を識別するために書くことができる機能のどのような不思議でしたか?

Housenumber 
1 
14 
5 
+2

たぶん 'などを提供します.nu​​meric(myData $ Housenumber) '? – zx8754

答えて

3
df[length(grep("[^[:digit:]]", df$Housenumber, value=F)) == 0, ] 

説明:

正規表現[^[:digit:]]は、例えば、任意の数値文字と一致します他の文字や記号を削除する必要があります。一致が見つかった場合

コール

grep("[^[:digit:]]", df$Housenumber, value=F) 

はあなたのHousenumber列の最初のインデックスを含むベクトルを返します。したがって、一致が見つからない場合、このベクトルの長さはゼロになり、その行を保持したいことを意味します。

この特定のケースでは、私は@akrunによって与えられた答えが好きですが、私の答えは正規表現の任意の並べ替えを使用して行をフィルタリングの一般的なケースでも動作します。

1

as.numericを使用すると、数値以外の要素をNAに変換し、!is.naの論理インデックスを持つ行を削除できます。

df1[!is.na(as.numeric(df1$Housenumber)),, drop= FALSE] 
0

as.numericで数値を数値に変換できます。数値以外の値は強制的にNAになるため、第2ステップでNAの値を除外できます。

Housenumber <- c(1,14,5,"at5","53.!","boat") # Create your housenumber vector 

Housenumber <- as.numeric(Housenumber) # Convert it to numeric 

Housenumber <- Housenumber[!is.na(Housenumber)] # Filter out the NA 

これはすべきことです。

0

書き込み、この関数のコードで、あなたがそれを必要とする場合は、複数の時間:

numerics_of = function (x){ 
nums = c() 
a = suppressWarnings(as.numeric(x)); 
return (a[!is.na(a)]) 
} 

とexmaple用:

x = c(2,4,5,3,2,"a",2,3,4) 
numerics_of(x) 

は、この出力に

[1] 2 4 5 3 2 2 3 4 
関連する問題