R scale :: label_format преобразует мою цифру c в число с плавающей точкой перед преобразованием в символ - PullRequest
0 голосов
/ 31 января 2020

У меня есть функция, которая предназначена для создания меток для графика. У меня есть четыре подмножества данных, все из одного источника. Моя функция работает с тремя из четырех подмножеств, но с четвертым мешает. У меня есть целое число (ie 2914). Scales :: label_comma () преобразует число 2914 в символ, который читает «2914.0».

Вот разбивка таблицы, которая не работает:

    > str(df_a)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   9 obs. of  12 variables:
 $ year               : num  2017 2017 2017 2017 2018 ...
 $ inpatient_discharge: num  2914 2662 2566 2513 2672 ...
 $ ed_discharges      : num  23225 24117 24565 23001 24005 ...
 $ outpatient_surg    : num  3193 3313 2813 4255 3391 ...
>

И когда я использую label_comma () для столбца "inpatient_discharge", который является цифрой c, я получаю :

> scales::label_comma()(df_a$inpatient_discharge)
[1] "2,914.0" "2,662.0" "2,566.0" "2,513.0" "2,672.0" "2,478.0" "2,404.0" "2,398.0" "2,504.0"

Когда я использую label_comma () в другом столбце, я получаю ожидаемый результат

> scales::label_comma()(df_a$ed_discharges)
[1] "23,225" "24,117" "24,565" "23,001" "24,005" "23,416" "23,983" "22,648" "23,390"

Кроме того, когда я использую label_comma () на другом кадре данных, который имеет подмножество из того же источника, я получаю ожидаемый результат

> scales::label_comma()(df_b$inpatient_discharge)
[1] "7,457" "7,066" "6,918" "6,912" "7,265" "6,918" "6,748" "6,733" "7,064"

Это ошибка? Я не могу найти ничего о том, почему это будет действовать так. Он работает даже с этими числами, когда они находятся за пределами кадра данных

> test <- as.numeric(2914)
> label_comma()(test)
[1] "2,914"

Я полностью потерян на этом

1 Ответ

0 голосов
/ 20 февраля 2020

Быстрое исправление

Этого можно добиться, передав аргумент accuracy в label_comma.

accuracy = 1, чтобы гарантировать отсутствие показа чисел после запятой.

Попытка объяснения

В вашей серии чисел должно быть что-то, что убеждает label_comma в том, что ему нужно использовать десятые для различения guish некоторых чисел. См. документацию :

точность : ... Если по умолчанию NULL, используется значение heuristi c, которое должно обеспечивать минимальное число разрывов цифр, необходимых для отображения разницы между соседними значениями.

Это объясняет, почему ваш тестовый пример не отвечает так же, как ваш исходный df: он не вызывает различающуюся heuristi c .

Примеры того, как это сделать

Ниже представлен пример, который предоставляет различные способы преобразования вашей серии чисел в строки в формате запятой без чисел после запятой. Очевидно, что вам они не нужны, но я просто проверял, что происходит в разных ситуациях.

Я использовал только ваши первые пять чисел, как видно из вашего вопроса. В будущем, пожалуйста, постарайтесь создать воспроизводимых примеров - Я обычно нахожу, что этот процесс приводит меня к решению моей проблемы, прежде чем мне даже придется спрашивать!

Вы можете вставить свой более полный ряд чисел в Пример ниже, и посмотрите, что произойдет.

Первые несколько примеров ниже не используют аргумент accuracy; последние пару примеров делают. Но во всех случаях нет чисел после десятичной точки.

Последний пример заменяет ваш первый первый столбец отформатированными числами (в виде строк) - так я бы предпочел выполнить эту операцию, но вы можете выбрать, что работает для вас.

library(scales)
library(tibble)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

df <- tibble(inpatient_discharge = c(2914, 2662, 2566, 2513, 2672))
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  1 variable:
#>  $ inpatient_discharge: num  2914 2662 2566 2513 2672

# add column using label_comma
df["discharge_label_comma"] <- scales::label_comma()(df[[1]])
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  2 variables:
#>  $ inpatient_discharge  : num  2914 2662 2566 2513 2672
#>  $ discharge_label_comma: chr  "2,914" "2,662" "2,566" "2,513" ...

# add column using comma alias
df["discharge_comma"] <- scales::comma(df[[1]])
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  3 variables:
#>  $ inpatient_discharge  : num  2914 2662 2566 2513 2672
#>  $ discharge_label_comma: chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma      : chr  "2,914" "2,662" "2,566" "2,513" ...

# add column using dplyr::mutate
df <- df %>% dplyr::mutate(discharge_comma_mutate = scales::comma(inpatient_discharge))
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  4 variables:
#>  $ inpatient_discharge   : num  2914 2662 2566 2513 2672
#>  $ discharge_label_comma : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma       : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma_mutate: chr  "2,914" "2,662" "2,566" "2,513" ...

# add column using accuracy argument
df["discharge_comma_acc"] <- scales::comma(df[[1]], accuracy = 1)
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  5 variables:
#>  $ inpatient_discharge   : num  2914 2662 2566 2513 2672
#>  $ discharge_label_comma : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma       : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma_mutate: chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma_acc   : chr  "2,914" "2,662" "2,566" "2,513" ...

# convert initial first column using dplyr::mutate_at and accuracy argument
# (alternatively use dplyr::transmute or mutate_all/mutate_if)
df <- df %>% mutate_at(vars(inpatient_discharge), ~ scales::comma(., accuracy = 1))
str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    5 obs. of  5 variables:
#>  $ inpatient_discharge   : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_label_comma : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma       : chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma_mutate: chr  "2,914" "2,662" "2,566" "2,513" ...
#>  $ discharge_comma_acc   : chr  "2,914" "2,662" "2,566" "2,513" ...

Создано в 2020-02-20 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...