提问人:Hack-R 提问时间:1/5/2015 最后编辑:Hack-R 更新时间:1/6/2015 访问量:161
R - 如何改进 simpleCap 以处理更复杂的名称?
R - How to improve simpleCap to handle more complex names?
问:
我使用一个通用函数来正确格式化数据库中的名称,以便进行报告:simpleCap
simpleCap <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2),
sep="", collapse=" ")
}
然后,在另一篇 Stackoverflow 帖子之后,我附加到本文的开头,以处理以全部大写形式输入的名称:tolower()
simpleCap <- function(x) {
x <- tolower(x)
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2),
sep="", collapse=" ")
}
这适用于“Greg Smith”或“Bob Jones”等名字,但我的大数据包含许多更复杂的名字。我可以使用一些帮助来解决以下情况:
- 名称“bin”、“ibn”、“de”和“del”不应大写,例如“Sakib bin Salam”
- 大写应适用于连字符名称中的两个名称,例如“Peng-Jones”
- 只有包含单引号的名称中的第一个字母应大写,例如“Ta'if”,除非第一个字母是“O”,并且单引号位于第二个位置,如“O'Neil”
- 以“al-”或“as-”开头的姓氏只能在连字符后大写
- 姓氏以“De”开头,但“De”和其余姓氏之间没有空格,应像“DeGuest”一样大写
- 带有“Mac”(即“MacDonald”)的名称应将第 1 个和第 4 个字母大写
- 也许您可能知道的其他一些我没有想到的规则
示例输入
> "ADEDAYO DAIBO"
> "EQEREM ZEKA"
> "Mangaliso Ndlovu"
> "Akamanwam Itang"
> "Mohammed Al-Zahrani"
> "David Fernando"
> "Adham Obeidat"
> "TA'IF Faithfull"
> "Bahaa ALHAMMOUD"
> "Fatima AlAli"
> "Tiffany Scatliffe"
> "Imad Hameedullah"
> "HEIN ELLIS"
> "Victoria Francis-Anyanwu"
> "Michael DeCesare"
> "chris oboh"
> "La-Keisha Wilmott"
> "sahar al"
> "Yuri DEGUEST"
> "jim macdonald"
> "molly oneil"
示例输出
> "Adedayo Daibo"
> "Eqerem Zeka"
> "Mangaliso Ndlovu"
> "Akamanwam Itang"
> "Mohammed al-Zahrani"
> "David Fernando"
> "Adham Obeidat"
> "Ta'if Faithfull"
> "Bahaa al-Hammoud"
> "Fatima al-Ali"
> "Tiffany Scatliffe"
> "Imad Hameedullah"
> "Hein Ellis"
> "Victoria Francis-Anyanwu"
> "Michael DeCesare"
> "Chris Oboh"
> "La-Keisha Wilmott"
> "Sahar Al"
> "Yuri DeGuest"
> "Jim MacDonald"
> "Molly O'Neil"
答: 暂无答案
评论
tm
randomForest