在 R 中使用 gsub() 删除括号和美元符号?

Removing parenthesis & dollar sign using gsub() in R?

我已经将一个 csv 文件导入到 r。我的专栏中很少包含货币数据(例如以“$”开头)。要删除“$”并将其转换为数字类型,我使用了 gsub() 函数并且它工作正常。 示例代码为:

strip_dollars = function(x) { as.numeric(gsub("[\$, ]", "", x)) }
lapply(data[ , c("x4", "x5", "x7", "x8")] , strip_dollars) 

但是在一个特定的货币列中,我很少有包含括号的条目,例如 ($2,345)、$3,500、$5,600、($3,234)、…… 因此,对于本专栏,上述代码不起作用。 请帮助我从这些条目中删除括号和美元符号。

此外,为了识别包含货币数据的列,我尝试了很多方法,包括 中给出的解决方案,但它不起作用。请提出一个最佳的方法。

我认为最简单的方法是逐步检查被替换的内容。我推断您不想丢失 parens 建议的 negative-ness,所以我们将执行两个步骤:

s <- c("(,345)", ",500", ",600", "(,234)")
gsub("[$),]", "", s)
# [1] "(2345" "3500"  "5600"  "(3234"

这删除了大部分垃圾(我们没有 want/need 保留),现在让我们处理前导 left-paren:

gsub("^\s*[(]", "-", gsub("[$),]", "", s))
# [1] "-2345" "3500"  "5600"  "-3234"

从这里,如果需要,您可以转换为 numeric:

as.numeric(gsub("^\s*[(]", "-", gsub("[$),]", "", s)))
# [1] -2345  3500  5600 -3234

这对 mal-formed 字符串不是很稳健。例如,虽然我为 left-paren 查找(并删除)前导 space,但任何其他内容都会有问题。