我是R语言的新手我面临的问题是提取名称的中间名,如
Carlsson,Frans Olof先生 Heininen,小姐。温德拉玛丽亚 海斯,查尔斯梅尔维尔夫人
在这里,我想只选择名称中间使用的先生或小姐等名称的称呼。引导我,我该怎么做。
答案 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."