【发布时间】:2016-08-09 11:41:13
【问题描述】:
我的字符串如下所示:
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"
我问的上一个问题得到了一个答案,该答案能够成功地将我的字符串仅包含名字和姓氏,并将它们格式化为您在上面看到的这种形式,但是,额外的奇怪字符和诸如 * 之类的东西, # 和 15-day dl 导致此解决方案出现问题(预期)。以下代码仅用于格式化名字和姓氏:
sub("^(.)\\S+(\\s+.*)$", "\\1.\\2", MLB$Names)
非常感谢您的帮助 - 我是 R 新手,我正在尝试用棒球统计数据做一些非常有趣的事情。感谢您的宝贵时间!
【问题讨论】:
-
例如
sapply(strsplit(gsub("[^[:alpha:][:blank:]']", "", x), " "), function(x) {paste0(substr(x[1], 1, 1), ". ", x[2]) })?
标签: r regex character string-formatting