Подтвердить что ты не робот

Как искать несколько строк и не заменять их ничем в списке строк

В R у меня есть столбец в data.frame, как это:

npt2 $имя

[1] "Андреас Гролль, М.Д."
[2] "
[3]" Пан-Чыр Ян, PHD "
[4]" Су-Фан Дженг, Sc.D "
[5]" Мостафа К Мохамед Фонтананет Арно "
[6]" Томас Юзефяк, М.Д. "
[7]" Медицинский монитор "
[8]" Ци Чжу, MD "
[9]" Холли Познер "
[10]" Питер С. Сибель, MB BS, PhD Шанталь Керсенс, PhD "
[11]" Ланс А Минддерс, М.Д. "
[12]" Лоренс Карри, доктор медицины"

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

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

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

4b9b3361

Ответ 1

Любой из них:

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

И Мэтт Паркер выше, и Томми ниже подняли вопрос: "M.R.C.P.", "PhD", "D.Phil". и "Ph.D." или другие британские или континентальные обозначения степеней степени доктора, следует искать и удалять. Возможно, @user56 может сообщить, что это за намерение.

Ответ 2

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

 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)

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

Ответ 3

Здесь вариант, который удаляет лишние "," тоже. Не требуется также 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"