2017-06-22 12 views
0

私は簡単な問題を抱えています。おそらく正規表現の問題。私は初心者です。例えば1などの文字列ベクトルをご検討ください:str_extract_allを使ってRの最初の2つの単語だけを抽出します。

:現在

c(Homo_sapiens, Solenopsis_invicta, Rattus_novaborensis, Candida_albicans) 

私は次の関数を使用しています:

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home') 

私がどのように見えるの種のための新しいベクトルで終わると思いました

str_extract_all(species_location,'^(\\S+?)_(\\S+?)_') 

しかし、それは私のために設計したものの代わりに最初の3つの単語を返します。なぜ私は理解できません。誰でも助けて説明することができますか?ありがとう

更新: 私のRコンソール(Mac OS 3.0.0、Rapp 1.60)を除いて、上に入力したコードは正常に動作します。私はまだそこに問題があるのか​​分かっていないが、それは他の人がチェックするのに興味があるかもしれない。ここで画像を追加しようとします。 Unusual interpretation of regex

+2

を使用することができます。あなたのサンプルコードは、実行しているものと一致していますか? – Marius

+0

あなたが肯定的になりたいのであれば、あなたは狂っていません。あなたの怠惰な修飾子で何らかの魔法が起きる可能性があると思われたら、これを試してください: '^([a-zA-Z] +)_([a -zA-Z] +)_ ' – Addison

+0

これは非常に奇妙です!私の側では、毎回最初の3つの言葉が返ってきます。私は({2}を使って)非常に多くの小さな修正を試みました!.. – Scientist

答えて

3

ちょうどstringrパッケージに依存しています。

library(stringr) 

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home') 

word(species_location, 1,2, sep="_") 
+0

最後に、明らかに、いくつかのRバージョンの問題があります。上記を参照してください。それでも私はあなたのコードを最善のソリューションとしてマークしています。なぜなら、コードはとても洗練されていて、後で理解しやすくなります。 – Scientist

2

私たちは、私が(_`末尾 `続く)各項目の最初の二つの単語を取得し、あなたの例のコードを実行している、私はこれを再現することはできませんstr_extract

str_extract(species_location, "[^_]+_[^_]+") 
関連する問題