r - 如何用重复的分隔符分割字符串?
问题描述
我有以下格式的电影名称列表:
电影名称
Ace Ventura: When Nature Calls (1995)
十二只猴子(又名 12 只猴子)(1995 年)
七(又名 Se7en)(1995)
French Twist (Gazon maudit) (1995)
布朗克斯的隆隆声 (Hont faan kui) (1995)
我正在尝试拆分年份并形成一个新列。
数据。
注:由用户 Rui Barradas 编辑
x <- scan(what = character(), text = '
"Ace Ventura: When Nature Calls (1995)"
"Twelve Monkeys (a.k.a. 12 Monkeys) (1995)"
"Seven (a.k.a. Se7en) (1995)"
"French Twist (Gazon maudit) (1995)"
"Rumble in the Bronx (Hont faan kui) (1995)"
')
解决方案
您可以使用separate()
包的功能tidyr
通过所需的分隔符拆分 data.frame 中的列。
正如其他人所说,您可以使用正则表达式来查找数据中的模式。下面我用来(?=\\(\\d{4}\\))
在括号内查找 4 位数字的模式(并将其设置为分隔符)。您可以将其与积极的前瞻 ?=
结合起来寻找模式,但保留它以供以后使用。
# load package tidyr
require(tidyr)
# your data
x <- scan(what = character(), text = '
"Ace Ventura: When Nature Calls (1995)"
"Twelve Monkeys (a.k.a. 12 Monkeys) (1995)"
"Seven (a.k.a. Se7en) (1995)"
"French Twist (Gazon maudit) (1995)"
"Rumble in the Bronx (Hont faan kui) (1995)"
')
# to data.frame
x <- as.data.frame(x)
# split by delimiter (4 digits within parenthesis)
# and create two columns - movie name and year
x <- separate(x, col = x, into = c('movie', 'year'),
sep = "(?=\\(\\d{4}\\))")
输出
> x
movie year
1 Ace Ventura: When Nature Calls (1995)
2 Twelve Monkeys (a.k.a. 12 Monkeys) (1995)
3 Seven (a.k.a. Se7en) (1995)
4 French Twist (Gazon maudit) (1995)
5 Rumble in the Bronx (Hont faan kui) (1995)
如果您愿意,您可以稍后去掉年份列中的括号。
x$year <- gsub("[\\(|\\)]", "", x$year)
> x
movie year
1 Ace Ventura: When Nature Calls 1995
2 Twelve Monkeys (a.k.a. 12 Monkeys) 1995
3 Seven (a.k.a. Se7en) 1995
4 French Twist (Gazon maudit) 1995
5 Rumble in the Bronx (Hont faan kui) 1995
推荐阅读
- javascript - 在另一个函数的 if 语句中使用来自 fetch-api 的 promise 结果 - JS
- css - Rvest 排除节点
- c# - 连接 S3 存储桶中的对象
- cron - 每月第二天(工作日)运行作业的雪花任务
- php - 创建一个新项目和捆绑包 - “您是否忘记了另一个命名空间的 'use' 语句?”
- android - Expo应用程序无限刷新然后崩溃-Expo React Native
- emulation - mininet中的网络拓扑仿真问题
- c++ - 如何正确声明二进制操作的概念
- css - 具有自动列的网格布局使用全宽 flex 子项调整大小
- javascript - 从组件访问作用域插槽