我已经将一个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 $中给出的解决方案,但是它不起作用。请建议这样做的最佳方法。
答案 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
这对于格式错误的字符串不是很可靠。例如,尽管我正在寻找(并删除)左括号的前导空间,但其他任何问题都会出现。