我在Excel中使用“会计”样式格式化了数据,看起来像($317.40)
或$13,645.48
。作为一个正则表达式新手,我正在寻找一种更有效的方法来删除所有无用的符号并将括号中的字符串转换为负数。
到目前为止,我一直在这样做:
spending$Amount <- gsub("^[(]", "-", spending$Amount)
spending$Amount <- gsub("[$]", "", spending$Amount)
spending$Amount <- gsub("[)]", "", spending$Amount)
spending$Amount <- as.numeric(gsub("[,]", "", spending$Amount))
我可以在一行中完成吗?是否有专门的R包可以做到这一点?
答案 0 :(得分:2)
嵌套gsub
解决方案
x <- c("($317.40)", "$13,645.48")
as.numeric(gsub("\\(", "-", gsub("\\)|\\$|,", "", x)))
## [1] -317.40 13645.48
## Really convoluted bad way of doing it solution
mapply(FUN = function(x,y) ifelse(x,-1,1)*as.numeric(paste(y,collapse="")), grepl('\\(',x) ,regmatches(x, gregexpr('[0-9\\.]+',x)) )