r - R:用于提取混合分数的正则表达式
问题描述
我有一个数据框,其中一列包含一串数字,就像这个
'''> df
id full_quant
54 4 2 14 1/2
55 4 4 6
56 4 1/2
57 4 3
58 4 1
59 4 1 1/2
我想使用单个数字(例如 1 或 10)或分数或混合分数创建一个新列 $quantity。特别是使用字符串的第一个匹配模式——出于这个原因,我选择使用 sub 而不是 gsub
这是我用过的代码
df$quantity <- sub("(^[1-9]*\\b.[\\d\\\\d]?)", " \\1", df$full_quant)
但我最终得到了第一列的副本
> df
id full_quant quantity
54 4 2 14 1/2 2 14 1/2
55 4 4 6 4 6
56 4 1/2 1/2
57 4 3 3
58 4 1 1
59 4 1 1/2 1 1/2
我想要得到的是:
> df
id full_quant quantity
54 4 2 14 1/2 2
55 4 4 6 4
56 4 1/2 1/2
57 4 3 3
58 4 1 1
59 4 1 1/2 1 1/2
我使用 RStudio。如果有人能伸出援手,将不胜感激!
解决方案
以下工作(但需要stringr
):
df <- data.frame(id = rep(4, 6),
full_quant = c("2 14 1/2", "4 6", "1/2", "3", "1", "1 1/2"))
df$quantity <- stringr::str_extract(df$full_quant, "^([1-9]*(\\s?\\d*\\/\\d)?)")
df
# id full_quant quantity
# 1 4 2 14 1/2 2
# 2 4 4 6 4
# 3 4 1/2 1/2
# 4 4 3 3
# 5 4 1 1
# 6 4 1 1/2 1 1/2
这是基本的 R 版本:
df$quantity <- regmatches(df$full_quant, regexpr("^([1-9]*(\\s?\\d*\\/\\d)?)",df$full_quant))
或使用sub
:
df$quantity <- sub("^([1-9]*(\\s?\\d*\\/\\d)?).*", "\\1", df$full_quant)
推荐阅读
- reactjs - 为什么我的自定义组件没有在 React Native 中呈现?
- python - 如何使用 Python 解析复杂的 XML
- intellij-idea - 如何配置适用于 IntelliJ 和 Team City 的构建机制
- sas - SAS 有条件地执行 PROC SQL
- android - 如何让这个 imageview 出现在布局上?
- sql - SQL 查询 - 案例和子字符串
- sql - SQL Server:找到处理器至少具有 3 种独特速度的生产者
- python - 从 np.empty 初始化 numpy 数组
- javascript - 路由中带有可选字符的 Koa-router
- arrays - 为什么 p[0]++ 与 C 中的 *(p)++ 不同