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
我想用单个数字创建一个新列 $quantity,例如1或10,或分数,或带分数。特别是使用字符串的第一个匹配模式——出于这个原因,我选择使用 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 数量
54 4 2 14 1/2 2<br>
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)
我有一个数据框,其中一列包含一串数字,很像这个
´´´> 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
我想用单个数字创建一个新列 $quantity,例如1或10,或分数,或带分数。特别是使用字符串的第一个匹配模式——出于这个原因,我选择使用 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 数量
54 4 2 14 1/2 2<br>
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)