2017-11-01 11 views
0

dplyrで特定の観測と同じようなフィルタを実行しようとしています。Dplyr複数の類似条件

database %>% dplyr::filter(SOURCE %like% c('%ALPHA%', '%BETA%', '%GAMMA%')) 

おかげ

答えて

5

あなたはどれがあればマッチします、ALPHA|BETA|GAMMAgreplを使用することができます:私は、私は結果を返しません。これは、次を使用しようとした

Test <- sqldf("select * from database 
      Where SOURCE LIKE '%ALPHA%' 
      OR SOURCE LIKE '%BETA%' 
      OR SOURCE LIKE '%GAMMA%'") 

としてsqldf使用することができますのパターンは、SOURCEカラムに含まれています。あなたはそれが大文字と小文字を区別したい場合は

database %>% filter(grepl('ALPHA|BETA|GAMMA', SOURCE)) 

greplignore.case = Tを追加します。

2

%like%data.tableパッケージからです。

Warning message: 
In grepl(pattern, vector) : 
    argument 'pattern' has length > 1 and only the first element will be used 

%like%オペレータは、正規表現を使用して文字列のマッチングを行いgrepl機能、単なるラッパーです:あなたはおそらくも、この警告メッセージを見ています。したがって、%は必要ではなく、実際にはパーセント記号を表します。

あなたが一度に一致するように、一つのパターンを供給するので、どちらか(Psidomが示唆するように)正規表現 'ALPHA|BETA|GAMMA'を使用して、それらを組み合わせたり、3つのステートメントにテストを破ることができる

database %>% 
    dplyr::filter(
    SOURCE %like% 'ALPHA' | 
     SOURCE %like% 'BETA' | 
     SOURCE %like% 'GAMMA' 
    ) 
+0

これは私のデータセットで完璧な仕事をし、一致したsqldf、ありがとう! –