我有一个数据框,其中一列包含一串数字,非常类似于此一
´´´ > 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 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)