我的字符串如下所示:
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的新手,而我正试图用棒球统计数据来做一些非常有趣的事情。谢谢你的时间!
答案 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"