在文本中将百分比转换为十进制

Sve*_*ven 0 regex string r decimal percentage

我有几行data.frame,其中包含计算规则.在该字符串中我需要转换文本,如:

"{p500} * 65% >= {q600}"
Run Code Online (Sandbox Code Playgroud)

"{p500} * 0.65 >= {q600}"
Run Code Online (Sandbox Code Playgroud)

我是正则表达式的新手,但我认为gsub会对此有所帮助.有人可以帮忙吗?

jas*_*ner 6

您可以用来gsubfn对正则表达式进行计算:

library(gsubfn)
gsubfn("(\\d+)%", function(x) strtoi(x)/100,"{p500} * 9% >= {q600}")
[1] "{p500} * 0.09 >= {q600}"
Run Code Online (Sandbox Code Playgroud)

请注意,捕获组值通过传递给匿名替换函数 x = \\1

如果您的文本与您提供的示例一致,则可以base像@snoram建议的那样执行多个gsub :

gsub("(\\d)%","0.0\\1",gsub("(\\d{2})%","0.\\1","{p500} * 9% >= {q600}"))
[1] "{p500} * 0.09 >= {q600}"
Run Code Online (Sandbox Code Playgroud)

(\\d{2})场比赛恰好2个数字和括号创建可以在以后GSUB回顾一组.通过调用\\1替换,您将返回引用您在原始字符串中捕获的组.外部gsub (\\d)%恰好匹配1位数,并在这种情况下替换额外的0.

我自己在正则表达式方面仍然相对较新,但我发现这个备忘单很有帮助:R正则表达式

  • 这失败了'9%` (2认同)