I have a column in a dataframe like this:
npt2$name
# [1] \"Andreas Groll, M.D.\"
# [2] \"\"
# [3] \"Pan-Chyr Yang, PHD\"
# [4] \"Suh-Fang Jeng, Sc.D\"
# [5
With a single ugly regex:
gsub('[M,P].?D.?','',npt2$name)
Which says, find characters M or P followed by zero or one character of any kind, followed by a D and zero or one additional character. More explicitly, you could do this in three steps:
npt2$name <- gsub('MD','',npt2$name)
npt2$name <- gsub('M\\.D\\.','',npt2$name)
npt2$name <- gsub('PhD','',npt2name)
In those three, what's happening should be more straight forward. the second replacement you need to "escape" the period since its a special character.
Either of these:
gsub("MD|M\\.D\\.|PHD", "", test) # target specific strings
gsub("\\,.+$", "", test) # target all characters after comma
Both Matt Parker above and Tommy below have raised the question whether 'M.R.C.P.', 'PhD', 'D.Phil.' and 'Ph.D.' or other British or Continental designations of doctorate level degrees should be sought out and removed. Perhaps @user56 can advise what the intent was.
Here's a variant that removes the extra ", " too. Does not require touppper
either - but if you want that, just specify ignore.case=TRUE
to 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"