Как найти несколько строк и заменить их ничем в списке строк - PullRequest
12 голосов
/ 23 февраля 2012

У меня в столбце данных есть такой столбец:

npt2$name
#  [1] "Andreas Groll, M.D."
#  [2] ""
#  [3] "Pan-Chyr Yang, PHD"
#  [4] "Suh-Fang Jeng, Sc.D"
#  [5] "Mostafa K Mohamed Fontanet Arnaud"
#  [6] "Thomas Jozefiak, M.D."
#  [7] "Medical Monitor"
#  [8] "Qi Zhu, MD"
#  [9] "Holly Posner"
# [10] "Peter S Sebel, MB BS, PhD Chantal Kerssens, PhD"
# [11] "Lance A Mynderse, M.D."
# [12] "Lawrence Currie, MD"

Я пробовал gsub, но безуспешно.После выполнения toupper(x) мне нужно заменить все экземпляры 'MD', 'MD' или 'PHD' ничем.

Есть ли хороший короткий трюк, чтобы сделать это?

На самом делеМне было бы интересно увидеть, как это делается в одной строке и как по-разному это делается в одной команде во всем списке.

Ответы [ 3 ]

25 голосов
/ 23 февраля 2012

Любой из них:

gsub("MD|M\\.D\\.|PHD", "", test)  # target specific strings
gsub("\\,.+$", "", test)        # target all characters after comma

И Мэтт Паркер вверху, и Томми внизу подняли вопрос: «MRCP», «PhD», «D.Phil».и доктор философииили другие британские или континентальные обозначения степеней докторантуры должны быть найдены и удалены.Возможно, @ user56 может посоветовать, что вы намеревались.

3 голосов
/ 23 февраля 2012

С одним уродливым регулярным выражением:

 gsub('[M,P].?D.?','',npt2$name)

Что говорит, найти символы M или P, за которыми следует ноль или один символ любого вида, за которым следуют D и ноль или один дополнительный символ.Более конкретно, вы можете сделать это в три этапа:

npt2$name <- gsub('MD','',npt2$name)
npt2$name <- gsub('M\\.D\\.','',npt2$name)
npt2$name <- gsub('PhD','',npt2name)

В этих трех случаях происходящее должно быть более простым.вторая замена, вам нужно «экранировать» точку, так как это специальный символ.

2 голосов
/ 23 февраля 2012

Вот вариант, который удаляет лишние "," тоже.Также не требуется touppper - но если вы хотите, просто укажите ignore.case=TRUE до gsub.

test <- c("Andreas Groll, M.D.", 
  "",
  "Pan-Chyr Yang, PHD",
  "Suh-Fang Jeng, Sc.D",
  "Peter S Sebel, MB BS, PhD Chantal Kerssens, PhD",
  "Lawrence Currie, MD")

gsub(",? *(MD|M\\.D\\.|P[hH]D)", "", test)
#[1] "Andreas Groll"                         ""                                     
#[3] "Pan-Chyr Yang"                         "Suh-Fang Jeng, Sc.D"                  
#[5] "Peter S Sebel, MB BS Chantal Kerssens" "Lawrence Currie"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...