2016-02-29 2 views
1

Я работаю над проектом, который использует многомерное масштабирование, чтобы попытаться объединить политиков вместе на основе записей голосования. Моя добрая находка высока; однако я хочу построить координаты MDS с именами политиков, чтобы я мог делать выводы из расчета. Для этого я использую библиотеку wordcloud.Выделение регулярных выражений в R

Я пытаюсь использовать регулярное выражение в R, используя пакет stringr, чтобы извлечь имена политиков из моего «имени», вектор имен содержит некоторые нестандартные символы. Моя цель - извлечь фамилию и символы в квадратных скобках. Есть 3 способа имена выглядят и они ниже:

  • сенатор Майк Ли [R]
  • сенатор Крис куны [D, 2010-2020]
  • сенатор Чарльз â € œChuckâ € Grassley [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

Сначала вы путаете порядок args в 'str_replace': он должен быть' 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

Смежные вопросы