2015-07-09 6 views
3

Поэтому у меня есть вектор, которые состоят изУдалите некоторые элементы образуют строку

data<-c("Mark And (BD Marketing Da 1 Z _ 9793)", 
"Andre All (BD Marketing DA 1 Z _ 9794 (plus))", 
"Alli Inn (BD Sport Educ 1 C _ 9722 (plus))", 
"Alli Inn (BP Sport Educ 1 Z _ 9347)") 

И теперь мне нужно, чтобы удалить все символы до _, а также как скобки где отсутствуют слово (плюс) так что результат должен быть

Mark And BD Marketing Da 1 Z 
Andre All BD Marketing DA 1 Z (plus) 
Alli Inn BD Sport Educ 1 C (plus) 
Alli Inn BP Sport Educ 1 Z 

Я использовал gsub("\\s*\\w*$", "", data) и получил

Alli Inn (BP Sport Educ 1 Z 

, но это неверно, поскольку мне нужно удалить другие скобки, а также сохранить (плюс) там, где он написан.

Я попытался это: gsub('\((?!plus)|(?<!plus)\)|.\\d+', '', rownames(data), perl=TRUE) и получил эту Alli Inn BP Sport Educ Z, но теперь мне не хватает номер 1 перед тем письмом

+1

Для дальнейшего использования у вас есть вектор, а не кадр данных. Кадр данных _ содержит один или несколько векторов. –

ответ

1
gsub('\\((?!plus)|(?<!plus)\\)|_ [0-9]*', '', data, perl=TRUE) 
#[1] "Mark And BD Marketing Da 1 Z "   
#[2] "Andre All BD Marketing DA 1 Z (plus)" 
#[3] "Alli Inn BD Sport Educ 1 C (plus)" 
#[4] "Alli Inn BP Sport Educ 1 Z " 
+0

Если это сделать, у меня все еще есть такие цифры: Mark And BD Marketing Da 1 Z 9793, я думаю, что я решил изменить что-то в _ [0-9], чтобы также удалить числа? – Miha

+0

Я пробовал это: 'gsub (' \\ ((?! plus) | (? Miha

+0

Можете ли вы опубликовать код, который вы запустили, и полученный результат? Потому что я использовал ваши данные и показал, что он работает. –

1

использованием dplyr и stringr это может быть быстро и грязно, но это делает работу :

library(dplyr) 
library(stringr) 
data %>% 
    str_replace_all(" _ [1-9][0-9]{0,3}|\\(|\\)", "") %>% 
    str_replace_all("plus", "(plus)") 
Смежные вопросы