分割不同长度的琴弦

时间:2019-11-01 20:32:53

标签: r tidyverse stringr

我有一个数据集,其中包含国会议员姓名以及其州和区号。理想情况下,我想将字符串分成包含代表名称,州和区号的新列。我可以成功拆分一个,但是由于字符串长度不同,因此不会与其他字符串匹配。以下是可复制的示例。

current_data <- tibble(
 names = c("Ralph Abraham La. 5", "Robert B. Aderholt Ala. 4", "Rick W. Allen Ga. 12", "Mark Amodei Nev. 2",
           "Kelly Armstrong N.D. 0", "Jodey Arrington Tex. 19"),
 party = c("R", "R", "R","R", "R", "R"),
 vote = c("N","N","N","N","N","N"))

这是我希望它看起来像的一个示例。

desired_data <- tibble(
 names = c("Ralph Abraham", "Robert B. Aderholt", "Rick W. Allen", "Mark Amodei",
        "Kelly Armstrong", "Jodey Arrington"),
 state = c("La.", "Ala.", "Ga.", "Nev.", "N.D.", "Tex."),
 district_num = c(5,4,12,2,0,19),
 party = c("R", "R", "R","R", "R", "R"),
 vote = c("N","N","N","N","N","N"))

希望大家都能帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

current_data%>%
   separate(names,c("names","state","district"),"\\s(?=\\S+\\s+\\d)|\\s+(?=\\d)")

# A tibble: 6 x 5
  names              state district party vote 
  <chr>              <chr> <chr>    <chr> <chr>
1 Ralph Abraham      La.   5        R     N    
2 Robert B. Aderholt Ala.  4        R     N    
3 Rick W. Allen      Ga.   12       R     N    
4 Mark Amodei        Nev.  2        R     N    
5 Kelly Armstrong    N.D.  0        R     N    
6 Jodey Arrington    Tex.  19       R     N