r - 将名称和(国家)拆分为两列
问题描述
我有以下格式的数据,我正在尝试使用“分离”功能将歌手的姓名与国家/地区分开;但是,它也将名字和姓氏分隔到不同的列中。如何将全名分为一列,将国家分为另一列?你们能帮我解决我做错了什么吗?
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 = '"()"))
解决方案
我们可以使用正则表达式环视来分割之前的空间(
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
推荐阅读
- reactjs - 尝试使用 UseEffect 在 react.js 中创建倒计时(日:小时:分钟:秒)
- python - Pandas:如何在 Dataframe 中添加表示 2 个属性交集的列
- api - 在 DocuSign 中,信封状态报告(在控制台 -> 报告部分)我们得到一个字段总页数;如何通过 DocuSign API 获得相同的?
- node.js - 如何从前端保存和发送 JWT 令牌
- oauth-2.0 - 用于身份验证的 Onedrive/Azure API 代码流将我发送到我的重定向 url,但没有给我附加到 url 的代码
- php - Docker 上的 Nginx 仅提供欢迎页面
- r - 如何在绘图中添加线条和阴影
- python - Python / Pyspark - 正确的方法链接顺序规则
- python - /searchbar/ 处的索引错误
- python - 即使直接 SSL 连接有效,Requests.get 也会失败