2012-02-23 126 views
12

在R的名單之內什麼也沒有取代他們,我有這樣的data.frame列:如何搜索多個字符串,字符串

NPT2 $名

[1] 「Andreas Groll,MD」
[2] 「」
[3] 「楊泮池,PHD」
[4] 「徐芳鉦,Sc.D」
[5] 「Mostafa的ķ穆罕默德Fontanet阿諾」
[ 6]「Thomas Jozefiak,MD」
[7] 「醫學監控」
[8] 「奇珠,MD」
[9] 「霍利波斯納」
[10] 「彼得小號賽貝爾,MB BS,博士尚塔爾Kerssens博士」
[11]「Lance A Mynderse,MD」
[12] 「勞倫斯·柯里,MD」

我試圖GSUB,但沒有運氣。 做完toupper後(x) 我需要替換'MD'或'M.D.'的所有實例。或'PHD'沒有任何''。

有R內一個漂亮的短把戲做呢?

其實我很想看到它在一個字符串做,如何區別是它在一個命令整個名單上做(我不是在函數式編程卻非常好)

+0

關於 「Sc.D」 什麼? – 2012-02-23 15:54:15

+0

我希望避免正則表達式,因爲我可以簡單地枚舉所有壞字符串被刪除。噢,我的......還有一種技術(REgEx)可以返回(重新掌握):-( – userJT 2012-02-23 21:14:57

+0

該字段應該只是姓氏,但數據不一致。目標是最終只有數據是無論是姓氏或名字,並刪除所有學術或其他標題 – userJT 2012-02-23 21:16:16

回答

23

無論這些:

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

兩個馬特 - 帕克上方和下方湯米曾提出是否「MRCP」,「博士」,這個問題「哲學博士」。和'博士'或其他英國或歐洲大陸的博士學位水平的指定應該被尋找並被移除。也許@ user56可以提供意圖是什麼。

+0

oo很好的答案。我總是忘記或在正則表達式! – Justin 2012-02-23 15:52:20

+0

不是'gsub'嗎?我認爲'sub'只是匹配第一個實例... – 2012-02-23 15:55:18

+1

@MattParker'sub'只是匹配第一個實例,但它仍然是「矢量化」的。所以它會匹配向量的每個元素中的第一個實例。 – Justin 2012-02-23 15:59:02

3

有了一個醜陋的正則表達式:

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) 

在這三個,發生了什麼事應該更加直截了當。第二個替代品需要「逃離」自其特殊角色以來的時期。

+0

我喜歡組合的正則表達式,但我認爲你需要指定一個可選的文字週期而不是可選的任意字符例如,信件 - 考慮「Brian McDonald」。 – 2012-02-23 15:57:49

+0

Touche!但那時你想念MD。如果我正在做這個數據,我會明確地做到這一點,爲了清晰和可重複,每行更換一個。 (或DWin的版本與邏輯Ors) – Justin 2012-02-23 16:00:50

+0

它會錯過MD嗎? 'gsub('[M,P] \\。?D \\。?','','Brian McDonald,MD')'達到了預期的效果,對吧? – 2012-02-23 16:04:23

2

下面是一個刪除額外「,」的變種。不需要touppper - 但如果你需要,只需指定ignore.case=TRUEgsub

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"