在 readr R 中使用 parse_number 的负货币值

Negative currency values using parse_number in readr R

我正在导入需要从字符串转换为数字的销售数据。

我正在尝试使用 readr 中的 parse_number 来执行此操作,但它会抛出负值的解析错误,并将它们强制转换为 NAs。

举个例子:

x <- c(",000.00", "0.00", "-0.00")

y <- parse_number(x)

Warning: 1 parsing failure. row # A tibble: 1 x 4 col row col expected actual expected <int> <int> <chr> <chr> actual 1 3 NA a number -

y

[1] 1000 500 NA

parse_numberreadr 是否具有允许我为负货币值保留“-”的功能?

(我不是要 as.numeric(gsub()) 解决方案。)

您的示例中货币符号的使用有误。尝试

library(readr)
x <- c(",000.00", "0.00", "$-200.00")
parse_number(x)
#[1] 1000  500 -200

由于问题已知,因此一个简单的解决方案可以使用 gsub 作为:

parse_number(gsub("\$","",x))
#[1] 1000  500 -200

如果您想按照 继续使用 tidyverse 函数,您可以只使用 stringr 函数而不是 gsub。像这样的选项:

library(tidyverse)
x <- c(",000.00", "0.00", "-0.00")
x %>%
  str_replace("^-\$(.*)$", "$-\1") %>%
  parse_number()
#> [1] 1000  500 -200

x %>%
  str_remove("\$") %>%
  parse_number()
#> [1] 1000  500 -200

reprex package (v0.2.0) 创建于 2018-05-03。