2016-08-02 7 views
4

Как мне gsub() все, кроме указанного символа в R?gsub() все кроме указанных символов?

В моей проблеме у меня есть следующая строка ...

"the quick brown fox jumps over a lazy dog" 

Я должен сгенерировать новую строку, удалив все символы, кроме «г» и «о» и получить следующий вывод ...

"roooro" 

Предполагая, что все символы в нижнем регистре, как мне идти. Я пробовал ...

gsub(!"r","",gsub(!"o","",str1)) 

Но '!' не работает.

+1

См [* Что регулярное выражение будет соответствовать каждому символу, кроме запятой «» или запятой ';'] (http://stackoverflow.com/questions/1409162/what-regex-will-match-every-character-except-comma-or-semi-colon?). –

+0

На самом деле, я бы не назвал это точным обманом сообщения выше, так как персонажи и фактические требования (использование вектора) делают этот вопрос другим (ну, не уверен, что уникальный :)). –

ответ

5

Мы должны использовать ^ внутри [ для соответствия всем символам, кроме ro. Здесь [^ro]+ подразумевает сопоставление одного или нескольких символов, которые не являются «r» или «o», и заменяют его пустым ("").

gsub("[^ro]+", "", str1) 
#[1] "roooro" 

Если у нас есть вектор значений, мы можем создать шаблон с paste

v1 <- c("r", "o") 
gsub(paste0("[^", paste(v1, collapse=""), "]+"), "", str1) 
#[1] "roooro" 
+0

Спасибо arkun ... это работает для меня ... однако есть ли способ указать «r» и «o» как вектор вместо прямого указания их в команде gsub. – Gaurav

+0

@Gaurav Я считаю, что у вас есть вектор значений, в этом случае используйте 'paste' (обновленный пост) – akrun

+0

FYI: С этим методом' paste' следует следить за '' '' '' '' '' '' и ' символы, которые могут означать что-то другое или закрыть класс преждевременно. –

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