2012-02-23 98 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"