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

How do I convert a negative dollar value surrounded by parenthese to numeric?

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

样本 DF

sample <- 
  tibble::tribble(
   ~id, ~dollars,
    36, "([=10=].3)",
  1890,   ".6",
  3298, "([=10=].1)",
  3448,   "[=10=].2",
  4616,   "[=10=].0",
  5409, "([=10=].1)",
  5751, "([=10=].1)",
  5942,   "[=10=].1",
  6316,   "[=10=].0",
  6589,   "[=10=].1"
  )

下面将按照问题的要求做。

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