首页 > 解决方案 > 将名称和(国家)拆分为两列

问题描述

我有以下格式的数据,我正在尝试使用“分离”功能将歌手的姓名与国家/地区分开;但是,它也将名字和姓氏分隔到不同的列中。如何将全名分为一列,将国家分为另一列?你们能帮我解决我做错了什么吗?

x1 <- tibble(singer=c("Katheryn Elizabeth Hudson (USA)","Taylor Swift (USA)","Dua Lipa (UK)","Jessie J (UK)"))
new_table <- x1 %>% 
  separate(singer, into=c("Singer_name", "Country", sep = '"()"))

标签: r

解决方案


我们可以使用正则表达式环视来分割之前的空间(

library(dplyr)
library(tidyr)
x1 %>% 
    separate(singer, into=c("Singer_name", "Country"), sep = '\\s+(?=\\()')
# A tibble: 4 x 2
#  Singer_name               Country
#  <chr>                     <chr>  
#1 Katheryn Elizabeth Hudson (USA)  
#2 Taylor Swift              (USA)  
#3 Dua Lipa                  (UK)   
#4 Jessie J                  (UK)   

或者去掉括号

x1 %>% 
 separate(singer, into=c("Singer_name", "Country"), sep = '\\s\\(|\\)')

如果我们不需要括号,使用extract将字符捕获为一个组

x1 %>%
  extract(singer, into = c("Singer_name", "Country"),  "(.*)\\s\\(([^)]+).")
# A tibble: 4 x 2
#  Singer_name               Country
#  <chr>                     <chr>  
#1 Katheryn Elizabeth Hudson USA    
#2 Taylor Swift              USA    
#3 Dua Lipa                  UK     
#4 Jessie J                  UK     

推荐阅读