![](/img/trans.png)
[英]Use regex to extract mixed fraction and text that may also contain mixed fractions with R (stringr)
[英]R: Regex for extracting mixed fractions
我有一个数据框,其中一列包含一串数字,就像这个
''' > 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.