2017-12-09 22 views
0

私は文字リストを持っています。私は特定の列のリスト内の文字列のいずれかを含むdfの行を返すようにしたいと思います。私はのようなもの試してみました文字リストから文字列を含むdfの行を返す方法

:私は、行1と3のみを希望

hits <- df %>% 
filter(column, any(strings)) 


strings <- c("ape", "bat", "cat") 

head(df$column) 
[1] "ape and some other text here"   
[2] "just some random text" 
[3] "Something about cats" 

は助けを事前に

感謝を戻しました。

+3

は良い答えを得るために最初のステップです::[尋ねる]あなたは(大文字Catsに注意してください)grepl()ignore.caseパラメータを使用して簡単にこれを克服することができます。 –

+0

ありがとうございます。私は完全に終わる前に投稿しました。あなたの時間を無駄にすることをお詫び申し上げます。 – Chris

+1

より良い。しかし今、私たちはもっと文脈が必要です。データからの再現性のある小さな例と、データが大いに役立つ場合の望ましい結果を提供します。 –

答えて

1

あなたstringsベクター中の文字列のいずれかにマッチする正規表現で使用grepl()

strings <- c("ape", "bat", "cat") 

まず、あなたが必要な正規表現にstringsベクトルを折りたたむことができます。

regex <- paste(strings, collapse = "|") 

これは:

> regex <- paste(strings, collapse = "|") 
> regex 
[1] "ape|bat|cat" 

パイプ記号又はオペレータとして|働くので、この正規表現ape|bat|catape又はbat又はcatに一致します。

あなたdata.frame dfは、次のようになります場合:

> df 
# A tibble: 3 x 1 
         column 
         <chr> 
1 ape and some other text here 
2  just some random text 
3   something about cats 

その後、ご希望の文字列に一致する行だけを返すために、次のコード行を実行することができます。

df[grepl(regex, df$column), ] 

が出力されます

> df[grepl(regex, df$column), ] 
# A tibble: 2 x 1 
         column 
         <chr> 
1 ape and some other text here 
2   something about cats 

上記の例はcase-insens itiveでは、指定されたとおりに小文字の文字列と完全に一致します。ここで

> df[grepl(regex, df$column, ignore.case = TRUE), ] 
# A tibble: 2 x 1 
         column 
         <chr> 
1 ape and some other text here 
2   something about Cats 
0

これは正規表現で行うことができます。

aColumn <- c("ape and some other text here","just some random text","Something about cats") 
aColumn[grepl("ape|bat|cat",aColumn)] 

...と出力:次のようにも、Rのオブジェクトで正規表現を設定

> aColumn[grepl("ape|bat|cat",aColumn)] 
[1] "ape and some other text here" "Something about cats"   
> 

一つ。

# use with a variable 
strings <- "ape|cat|bat" 
aColumn[grepl(strings,aColumn)] 
関連する問題