2017-04-13 17 views
0

我是編程新手,從R開始,因爲我需要它在我的碩士課程中,有人可以幫助我逐步瞭解解決方案。有人能解釋一下函數「sub」對上面的字符向量做什麼嗎?

awards <- c("Won 1 Oscar.", 
    "Won 1 Oscar. Another 9 wins & 24 nominations.", 
    "1 win and 2 nominations.", 
    "2 wins & 3 nominations.", 
    "Nominated for 2 Golden Globes. 1 more win & 2 nominations.", 
    "4 wins & 1 nomination.") 

sub(".*\\s([0-9]+)\\snomination.*$", "\\1", awards) 

解決方案: 含有字符串的矢量:

Won 1 Oscar., 24, 2, 3, 2, 1 
+0

請刪除C++標記。 – YSC

+0

相關文檔:https://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html和https://stat.ethz.ch/R-manual/R-devel/ library/base/html/regex.html –

回答

0
[1]"Won 1 Oscar" 

無圖案匹配

[2]"24" 

匹配整個向量元素和24是由([0-9]+)爲組確定。 "\\1"捕獲第一組,所以矢量元素被這個組所取代。

其餘元件類似

2

函數調用sub(".*\\s([0-9]+)\\snomination.*$", "\\1", awards)執行以下操作:

在它看起來爲以下形式的圖案

  • 一些字符的字符向量awards的條目(可選) (.*
  • 後跟一個空格(\\s
  • 後跟數字([0-9]+
  • 後跟一個空格(\\s
  • 後跟單詞 '提名'(nomination
  • 其次是一些字符(可選)(.*
  • 隨後字符串($

年底如果能找到這樣的模式,那麼它取代它發現,如果沒有,那麼它留下的進入,因爲它是數量的條目。

因此"Won 1 Oscar."保持原樣,"Won 1 Oscar. Another 9 wins & 24 nominations."被數字24代替。

+0

針對「[0-9] +」的括號[0-9] +即「([0-9] +)」是否有所作爲?是否有必要使括號存在,使得參數「\\ 1」將匹配的數字替換爲矢量而不是用戶指定替換矢量? –

+0

Exacly。圍繞'[0-9]'的括號將模式轉換爲捕獲組。圓括號捕捉其內部模式匹配的文本。這個文本可以用'\\ 1'來引用第一個組,'\\ 2'用於第二個組(如果你的正則表達式中有多個)等等。 – ikop

相關問題