R - 提取子字符串

时间:2016-05-26 06:54:51

标签: r

我有一个包含名称列表的列。

示例:

Ryerson, Master. John Borie
Corey, Mrs. Percy C (Mary Phyllis Elizabeth Miller)

我想从他们的名字中提取他们的标题,即Mr,Mrs,Master等

功能:

In[79]:
mystring="Wilkes, Master. James (Ellen Needs)"
In[80]:
substr(sub(".*,", "", mystring),2,which(strsplit(sub(".*,", "", mystring),"")[[1]]==".")-1)
Out[80]:
[1] "Master"

当我在一个名称上测试上述功能时,它可以正常工作。但是,当我将相同的函数应用于具有名称列表的列时,它只提取两个字符。

示例:瑞尔森,硕士。约翰博里

我想看看' Master'从这个名字中提取,而我看到了Ma'。

[436] "Mi" "Mi" "Mr" "Mr" "Mr" "Mr" "Mr" "Mr" "Ms" "Mr" "Ma" "Mi" "Mr" "Mi" "Ma"

我不知道这个功能有什么问题。感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

根据显示的示例,我们可以匹配一个或多个不是444,)后跟[^,]+的字符和一个或多个空格(, )从字符串的开头(\\s+)或^一个|dot)后跟任何字符,直到字符串的末尾(\\.)并将其替换为.*

''

如果是第二个单词',则可以使用gsub("^[^,]+,\\s+|\\..*$", "", str1) #[1] "Master" "Mrs"

word

数据

library(stringr)
word(str1, 2)
#[1] "Master." "Mrs."   

答案 1 :(得分:1)

如果载体中有任何空格,例如:Mr。 Mahesh,你可以试试这段代码

my <- c("MR. Arun", "Master. mahesh")
y <- do.call(rbind,strsplit(my," "))
z <- y[,1]
print(z)
[1] "MR."     "Master."