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

时间:2018-12-22 22:18:15

标签: r string gsub parentheses dollar-sign

我已经将一个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),.. 因此,对于本专栏,上述代码不起作用。 请帮助我从这些条目中删除括号和美元符号。

此外,为了确定包含货币数据的列,我尝试了很多操作,包括R - identify which columns contain currency data $中给出的解决方案,但是它不起作用。请建议这样做的最佳方法。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是逐步解决被替换的问题。我推断您不想失去父母的建议,因此我们将分两步进行:

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

这会删除大部分垃圾(我们不想/不需要保留),现在让我们处理前面的左括号:

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

如果需要,可以从此处转换为numeric

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

这对于格式错误的字符串不是很可靠。例如,尽管我正在寻找(并删除)左括号的前导空间,但其他任何问题都会出现。