我的角色向量中有很多人的名字:
MLB$Names[1:4] [1] "Derek Jeter" "Robinson Cano" "Nick Markakis" "David Ortiz"
我想将它们格式化为包含第一个大写字母,一个句点,然后是一个空格和他们的姓氏。我希望它看起来像以下
MLB$NamesFormatted[1:4] [1] "D. Jeter" "R. Cano" "N. Markakis" "D. Ortiz"
我假设最好的攻击方法是使用grep
或sub
,但是我一生都无法解决。我仍然是使用R的新手,但是我喜欢R的所有功能!
任何帮助将不胜感激!谢谢!
我们可以sub
通过捕获第一个字符作为一个组(^(.)
),然后捕获一个或多个非空白(\\S+
),然后捕获一个或多个空白的另一个捕获组,并以一个或多个字符((\\s+.*)
)到末尾($
)进行捕获来使用字符串并替换为第一个反向引用(\\1
),.
然后是第二个反向引用(\\2
)。
sub("^(.)\\S+(\\s+.*)$", "\\1.\\2", MLB$Names)
#[1] "D. Jeter" "R. Cano" "N. Markakis" "D. Ortiz"
或者可以使用紧凑的代码来实现,该代码可以匹配一个或多个小写字母([a-z]+
)并替换为.
。
sub("[a-z]+", ".", MLB$Names)
#[1] "D. Jeter" "R. Cano" "N. Markakis" "D. Ortiz"
这是另一种选择,strsplit
其中我们将一个或多个小写字母后跟一个或多个空格([a-z]+\\s+
)分开,将list
withvapply
和paste
字符串循环在一起。
vapply(strsplit(MLB$Names, "[a-z]+\\s+"), paste, collapse=". ", character(1))
#[1] "D. Jeter" "R. Cano" "N. Markakis" "D. Ortiz"
MLB <- data.frame(Names = c("Derek Jeter", "Robinson Cano",
"Nick Markakis", "David Ortiz"), stringsAsFactors=FALSE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句