格式化R中的异常(名字和姓氏)字符串

时间:2016-04-17 20:46:56

标签: r grep character string-formatting

我的字符串如下所示:

MLB$Name[1:6]
[1] "Wil Myers"   "Cory Spangenberg*"   "Alexei Ramirez #"   "Yangervis Solarte# (15-day dl)"   "Melvin Upton Jr."   "Travis d'Arnaud"

如您所见,这些字符串包含括号(),星号*和其他不常见的字符(#d'Arnaud)。我从棒球网站上抓取这些内容,但它们并没有以友好可用的方式出现。我要捕获的所有内容都是名字和姓氏,第一个名称是缩写(后跟句点),后跟姓氏。我不想要任何常用字符,或Jr. (15-day dl)后的名字

我希望我的字符串看起来像这样:

MLB$NameFormatted[1:6]
[1] "W. Myers"   "C. Spangenberg"   "A. Ramirez"   "Y. Solarte"   "M. Upton"               "T. d'Arnaud"

我问的上一个问题得到了一个答案,它能够成功地将我的字符串只用名字和姓氏,并将它们格式化为您在上面看到的这种形式,但是,其他奇怪的字符和诸如{{1}之类的东西},*#导致此解决方案出现问题(预期)。以下代码仅用于格式化名字和姓氏:

15-day dl

我真的很感谢你的帮助 - 我是R的新手,而我正试图用棒球统计数据来做一些非常有趣的事情。谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

这样做:

MLB$NameFormatted = sub("([A-Za-z])[A-Za-z']* ([A-Za-z' -]+[A-Za-z]+).*",'\\1. \\2', MLB$Name)

......以及正确处理麻烦制造者,例如" Ryan Rowland-Smith"和" Valerio de los Santos"

示例输出:

[1] "W. Myers" "C. Spangenberg" "A. Ramirez " "Y. Solarte" "M. Upton Jr"
[6] "T. d'Arnaud" "R. Rowland-Smith" "V. de los Santos"