如何将括号中的负美元值转换为数字?
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
我有一个 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