2016-02-29 77 views
1

我正在開發一個項目,該項目使用多維度縮放來嘗試根據投票記錄對政治家進行分組。我的合體性很高;然而,我想繪製MDS座標和政治家的名字,這樣我就可以從計算中得出結論。我爲此使用wordcloud庫。R中的正則表達式提取

我試圖在R中使用正則表達式使用stringr包從我的「名稱」向量中提取政治家的名字,名稱向量包含一些非標準字符。我的目標是提取方括號中的姓氏和字符。有3種不同方式的名稱看,他們是下面:

  • 參議員邁克·李[R]
  • 參議員克里斯·昆斯[d,2010年至2020年]
  • 參議員查爾斯€œChuckâ€格拉斯利[R]

從stringr包我運行這段代碼:

str_extract("\\w+\\s\\[.+\\]$", names) # names is the vector of names 

我得到這個錯誤:

Error in UseMethod("type") : 
    no applicable method for 'type' applied to an object of class "NULL" 

我試圖診斷此錯誤,但似乎無法找到任何聯機幫助。

+0

首先用'df $ colname <-as.character(df $ colname)' – MaxPD

+1

將你的名字轉換成字符首先,你在'str_replace'中混淆了args的順序:它必須是'str_extract(names,「\\ w + \\ s \\ [。+ \\] $「)'。第二,您將得到'[1]」Lee [R]「」Coons [D,2010-2020]「」Grassley [R]「'。第三,你期望什麼結果? –

+0

您發佈的結果是我期望的結果,這些元素用於我的向量的每個元素。 – user2962887

回答

0

您在str_replace混淆的參數順序:它必須是str_extract(names, "\\w+\\s\\[.+\\]$")(即names應該是第一個參數,正則表達式必須是第二個參數,你會得到

> str_extract(names, "\\w+\\s\\[.+\\]$") 
[1] "Lee [R]"    "Coons [D, 2010-2020]" "Grassley [R]" 

注意,您可以。移除]逸出的象徵,因爲它不是一個特殊的正則表達式元字符,你可以用一個否定的字符類[^][]+更換.+匹配比][以外的任何一個或多個字符:

> str_extract(names, "\\w+\\s\\[[^\\]\\[]+]$") 
[1] "Lee [R]"    "Coons [D, 2010-2020]" "Grassley [R]" 
0

鑑於

names <- c("Sen. Mike Lee [R]", "Sen. Chris Coons [D, 2010-2020]", "Sen. Charles “Chuck†Grassley [R]") 
stringr::str_extract("\\w+\\s\\[.+\\]$", names) # names is the vector of names 
# [1] NA NA NA 

t(sapply(regmatches(names, regexec(".*\\s(\\w+)\\s\\[(.+)\\]", names)), "[", -1)) 
#  [,1]  [,2]   
# [1,] "Lee"  "R"   
# [2,] "Coons" "D, 2010-2020" 
# [3,] "Grassley" "R" 

我無法重現你的錯誤。

+0

謝謝,它可以在RStudio控制檯中工作,但由於某些原因,我仍然無法在腳本中使用它。 – user2962887

+0

編碼問題?您應該始終爲複製粘貼運行提供可重複的示例。 – lukeA

+0

我會在將來這樣做,我的錯誤來自於混合了str_extract中的參數順序,正如上面的註釋中所指出的那樣。謝謝 – user2962887