我有一个包含以下内容的数据框:
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))。然而,它似乎创建了奇怪的列值。
这可能是另一种解决方案:
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)