在 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,但任何其他内容都会有问题。
我已经将一个 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,但任何其他内容都会有问题。