Отрицательные значения в валюте, используя parse_number в readr R - PullRequest
0 голосов
/ 04 мая 2018

Я импортирую данные о продажах, которые необходимо преобразовать из символьных строк в числовые.

Я пытаюсь использовать parse_number в readr, чтобы сделать это, но выдает ошибку разбора для отрицательных значений и приводит их к NA с.

Как пример:

x <- c("$1,000.00", "$500.00", "-$200.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_number или readr функциональность, которая позволяет мне сохранять "-" для отрицательных значений валюты?

(я не прошу as.numeric(gsub()) решения.)

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Если вы хотите остаться с функциями tidyverse согласно комментарию здесь , вы можете просто использовать stringr функции вместо gsub. Варианты как это:

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

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

Создано в 2018-05-03 пакетом Представить (v0.2.0).

0 голосов
/ 04 мая 2018

Использование символа валюты неправильно в вашем примере. Попробуйте

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

Поскольку проблема известна, следовательно, простое решение может использовать gsub как:

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