姓氏,名字到名字姓氏

JB1*_*B17 4 r data-cleaning

我有一组最后一种格式的名字

             Name Pos Team Week.x Year.x GID.x h.a.x Oppt.x Week1Points DK.salary.x Week.y Year.y GID.y
1 Abdullah, Ameer  RB  det      1   2015  2995     a    sdg        19.4        4000      2   2015  2995
2  Adams, Davante  WR  gnb      1   2015  5263     a    chi         9.9        4400      2   2015  5263
3 Agholor, Nelson  WR  phi      1   2015  5378     a    atl         1.5        5700      2   2015  5378
4    Aiken, Kamar  WR  bal      1   2015  5275     a    den         0.9        3300      2   2015  5275
5 Ajirotutu, Seyi  WR  phi      1   2015  3877     a    atl         0.0        3000     NA     NA    NA
6   Allen, Dwayne  TE  ind      1   2015  4551     a    buf        10.7        3400      2   2015  4551
Run Code Online (Sandbox Code Playgroud)

那只是第6行.我想把名字翻到名字姓氏.这是我试过的.

> strsplit(DKPoints$Name, split = ",")
Run Code Online (Sandbox Code Playgroud)

这会拆分名称变量,但是有空格,所以为了清除它我尝试过,

> str_trim(splitnames)
Run Code Online (Sandbox Code Playgroud)

但结果并不合适.这是他们的样子.

  [1] "c(\"Abdullah\", \" Ameer\")"          "c(\"Adams\", \" Davante\")"          
  [3] "c(\"Agholor\", \" Nelson\")"          "c(\"Aiken\", \" Kamar\")"            
  [5] "c(\"Ajirotutu\", \" Seyi\")"          "c(\"Allen\", \" Dwayne\")"
Run Code Online (Sandbox Code Playgroud)

有什么建议?我想得到一个数据框的列看起来像

Ameer Abdullah
Davabte Adams
Nelson Agholor
Kamar Aiken
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.谢谢

Joh*_*sNE 10

sub("(\\w+),\\s(\\w+)","\\2 \\1", df$name)
Run Code Online (Sandbox Code Playgroud)

(\\w+)匹配名称,,\\s匹配", "(逗号和空格),\\2 \\1以相反的顺序返回名称.


Her*_*oka 6

假设所有名称都是"姓氏,名字",你可以这样做:

names <- c("A, B","C, D","E, F")


newnames <- sapply(strsplit(names, split=", "),function(x) 
  {paste(rev(x),collapse=" ")})

> newnames
[1] "B A" "D C" "F E"
Run Code Online (Sandbox Code Playgroud)

它将每个名称分开", ",然后以相反的顺序将事物粘贴在一起.

编辑:对于小型数据集可能没问题,但提供的其他解决方案要快得多.Microbenchmark结果为100.000'名称':

Unit: milliseconds
     expr       min        lq      mean    median        uq       max neval cld
   heroka 1103.0419 1242.6418 1276.7765 1274.6746 1311.1218 1557.8579    50   c
 lyzander  149.4466  177.0036  206.4558  191.1249  218.1756  345.7960    50  b 
 johannes  142.7585  144.5943  151.0078  146.0602  147.1980  284.2589    50 a  
Run Code Online (Sandbox Code Playgroud)