使用R提取中间名

时间:2014-11-21 19:04:47

标签: r

我是R语言的新手我面临的问题是提取名称的中间名,如

Carlsson,Frans Olof先生 Heininen,小姐。温德拉玛丽亚 海斯,查尔斯梅尔维尔夫人

在这里,我想只选择名称中间使用的先生或小姐等名称的称呼。引导我,我该怎么做。

2 个答案:

答案 0 :(得分:3)

尝试

 gsub(".*, +([^ ]+).*", "\\1", str1)
 #[1] "Mr."   "Miss." "Mrs." 

或使用str_extract

中的stringr
 library(stringr)
 str_extract(str1, perl("(?<=, )[^ ]+(?= +)"))
 #[1] "Mr."   "Miss." "Mrs." 

stri_extract来自stringi

 stri_extract(str1, regex="(?<=, )[^ ]+(?= +)")
 #[1] "Mr."   "Miss." "Mrs." 

数据

 str1 <- c('Carlsson, Mr. Frans Olof','Heininen, Miss. Wendla Maria',
           'Hays, Mrs. Charles Melville')

答案 1 :(得分:1)

如果所有名称都排列在中间名称的最后位置,那么应该这样做:

 sapply( strsplit(str1, " "), tail, 1)

如果我的目标是确定敬意,那么我认为以列表为导向的方法会更好,你可以列举可接受的名称:“先生”,“先生”,“太太”,“太太”,博士, “Dr.”,“Doctor”,“Prof”。然后你可以用粘贴将它们绑在一起(用“|”作为分隔符并使用regexpr和regmatches来提取。

对于敬语问题,这是一种不那么健全的方法:

> str1 <- c('Carlsson, Mr. Frans Olof','Heininen, Miss. Wendla Maria',
            'Hays, Mrs. Charles Melville',"Feynmann, Prof. Richard", 
             "Livingstone, Dr. David")
> gsub("^(.+, )([Mrsi.PofD]+)( .+)", "\\2", str1)
[1] "Mr."   "Miss." "Mrs."  "Prof." "Dr."