繁体   English   中英

R:用于提取混合分数的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM