将“名字姓氏”更改为“姓氏,名字”

2024-03-29

我有一个姓名列表,需要将其从“名字姓氏”转换为“姓氏,名字”。

Barack Obama
Donald J. Trump
J. Edgar Hoover
Beyonce Knowles-Carter
Sting

我用了 G. Grothendieck 的答案序列化字符串中的“姓氏、名字”->“名字姓氏” https://stackoverflow.com/questions/14485060/last-name-first-name-first-name-last-name-in-serialized-strings?rq=1到达,得到gsub("([^ ]*) ([^ ]*)", "\\2, \\1", str)这给了我-

Obama, Barack
J., DonaldTrump, 
Edgar, J.Hoover, 
Knowles-Carter, Beyonce
Sting

我想得到什么——

Obama, Barack
Trump, Donald J. 
Hoover, J. Edgar
Knowles-Carter, Beyonce
Sting

我想要一个正则表达式的答案。


有一个深奥的函数叫做person设计用于保存名称,转换函数as.person它为你和一个做这个解析format之后使用它的方法(创造性地使用大括号参数)。它甚至适用于复杂的姓氏(例如van Nistelrooy),但单个名字的结果并不令人满意。它可以通过快速结束来修复sub though.

x <- c("Barack Obama","Donald J. Trump","J. Edgar Hoover","Beyonce Knowles-Carter","Sting", "Ruud van Nistelrooy", "John von Neumann")
y <- as.person(x)

format(y, include=c("family","given"), braces=list(family=c("",",")))
[1] "Obama, Barack"           "Trump, Donald J."       
[3] "Hoover, J. Edgar"        "Knowles-Carter, Beyonce"
[5] "Sting,"                  "van Nistelrooy, Ruud"   
[7] "von Neumann, John"

## fix for single names - curse you Sting!

sub(",$", "", format(y, include=c("family","given"), braces=list(family=c("",","))))
[1] "Obama, Barack"           "Trump, Donald J."       
[3] "Hoover, J. Edgar"        "Knowles-Carter, Beyonce"
[5] "Sting"                   "van Nistelrooy, Ruud"   
[7] "von Neumann, John" 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将“名字姓氏”更改为“姓氏,名字” 的相关文章

随机推荐