从字符串中删除某些元素

Remove certain elements form string

所以我有包含

的矢量
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)")

现在我需要删除 _ 之前的所有字符以及缺少单词 (plus) 的 parenthesis 所以结果应该是

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

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 " 

使用 dplyr 和 stringr 这可能是快速而肮脏的,但它完成了工作:

library(dplyr)
library(stringr)
data %>% 
  str_replace_all(" _ [1-9][0-9]{0,3}|\(|\)", "") %>% 
  str_replace_all("plus", "(plus)")