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

Formatting unusual (First and last Name) character strings in R

我的字符串如下所示:

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

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

之后 (15-day dl)Jr.

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

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

我之前问的一个问题得到了一个答案,它能够成功地获取我的只有名字和姓氏的字符串,并将它们格式化成你在上面看到的这种形式,但是,额外的奇怪字符和诸如 [= 14=、#15-day dl 导致此解决方案出现问题(预期)。以下代码仅用于格式化名字和姓氏:

sub("^(.)\S+(\s+.*)$", "\1.\2", MLB$Names)

非常感谢您的帮助 - 我是 R 的新手,我正在尝试用棒球统计数据做一些非常有趣的事情。感谢您的宝贵时间!

这样做:

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"