替换数字列中除以符号

Vik*_*ram 3 r dplyr tidyverse

我有一个包含以下内容的数据框:

df$old_price <- c('SR 2356' , 'SR 785' , 'SR 50/4 pack', 'SR 10/4 pack,'SR 490')
Run Code Online (Sandbox Code Playgroud)

如何替换old_price列中包含“SR 50/4 pack”或“SR 10/4 pack”等值的值以分别给出 12.5 和 2.5 而不会损坏数据?

我试过df$old_price <- as.integer(gsub('[a-zA-Z]', '', df$old_price))。然而,它似乎创建了奇怪的列值。

在此输入图像描述

Ano*_*n R 5

这可能是另一种解决方案:

library(stringr)

unlist(lapply(str_extract(vec, "\\d.*\\d"), \(x) eval(parse(text = x))))

[1] 2356.0  785.0   12.5    2.5  490.0
Run Code Online (Sandbox Code Playgroud)

亲爱的Ian Campbell建议的替代正则表达式解决方案:

unlist(lapply(str_extract(vec, "[\\d,./]+"), \(x) eval(parse(text = x))))
Run Code Online (Sandbox Code Playgroud)