我有一个包含名称列表的列。
示例:
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"
我不知道这个功能有什么问题。感谢您的帮助!
答案 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."