2017-06-22 28 views
0

我遇到了一個應該很簡單的問題。可能是正則表達式問題。我是一個新手。請考慮一個字符串矢量,如一個:使用str_extract_all只提取R中的前兩個單詞?

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

我想與物種新的載體,看起來像落得:

c(Homo_sapiens, Solenopsis_invicta, Rattus_novaborensis, Candida_albicans) 

目前我使用下面的函數:

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

但是,它返回前三個單詞,而不是我設計的。我無法弄清楚爲什麼。請任何人都能幫忙解釋一下嗎?謝謝

更新: 對於任何路過的人,上面輸入的代碼正常工作,除了我的R Console for Mac OS 3.0.0,R.app 1.60。我仍然不知道那裏有什麼問題,但可能是其他人要檢查的興趣。將嘗試在這裏添加圖片。 Unusual interpretation of regex

+2

我無法重現此,運行您的示例代碼,我得到每個項目(後跟一個尾部'_')的前兩個單詞。你確定你的示例代碼與你正在運行的代碼匹配嗎? – Marius

+0

如果你想成爲積極的人,你就不會發瘋 - 並且懷疑你的懶惰修飾符可能會出現某種魔法,那麼試試這個:'^([a-zA-Z] +)_([a -zA-Z] +)_' – Addison

+0

這很奇怪!在我這邊,它每次都會返回前三個字,我已經嘗試了很多小的修改(例如使用{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, "[^_]+_[^_]+")