如何将括号内的负美元值转换为数字值?

时间:2019-06-19 17:08:35

标签: r readr

我有一个df,其中有一列,其中负美元值用括号括起来。如何将正值和负值都转换为数值列? parse_number适用于正值,但不考虑代表负值的括号。

样本DF

sample <- 
  tibble::tribble(
   ~id, ~dollars,
    36, "($0.3)",
  1890,   "$3.6",
  3298, "($0.1)",
  3448,   "$0.2",
  4616,   "$0.0",
  5409, "($0.1)",
  5751, "($0.1)",
  5942,   "$0.1",
  6316,   "$0.0",
  6589,   "$0.1"
  )

1 个答案:

答案 0 :(得分:3)

以下将完成问题的要求。

as.numeric(sub("\\(", "-", gsub("\\)|\\$","", sample$dollars)))
# [1] -0.3  3.6 -0.1  0.2  0.0 -0.1 -0.1  0.1  0.0  0.1

可读性较低但更简单,只有一个*sub

as.numeric(gsub("\\(*\\$([[:digit:].]+)\\)*", "-\\1", sample$dollars))
# [1] -0.3  3.6 -0.1  0.2  0.0 -0.1 -0.1  0.1  0.0  0.1