Почему функция мутации в dplyr не обеспечивает процентное уменьшение? - PullRequest
0 голосов
/ 16 марта 2019

Я работаю над фреймом данных top10 и хочу узнать процентное снижение с 2014 по 2017 год:

формула для уменьшения%: Difference/Total2014 * 100

оригинал df (top10):

           Zip       Total2014 Total2017   Difference  
1    ZCT   44108     25122     22048       3074    
2    ZCTA5 43607     23547     21560       1987    
3    ZCTA5 44104     22479     20541       1938

Input

top10 <- mutate(top10,decrease = (Difference/Total2014)*100)
top10 <- mutate(top10,decreasepc = decrease*100)

Repex Output в обоих случаях:

             Zip Total2014 Total2017 Difference    decreasepc      decrease
1    ZCT   44108     25122     22048       3074  1.223629e+02  1.223629e-01
2    ZCTA5 43607     23547     21560       1987  8.438442e+01  8.438442e-02
3    ZCTA5 44104     22479     20541       1938  8.621380e+01  8.621380e-02

Как вы заметили, снижение по-прежнему составляет 1,22, а не 12,2%. Кроме того, как я могу округлить в 2 десятичных знака в mutate?

1 Ответ

0 голосов
/ 16 марта 2019

Проценты - это способ форматирования чисел.Это можно сделать, например, с помощью scales:

library(dplyr)
top10 <- mutate(top10, decrease = (Difference/Total2014))
top10 <- mutate(top10, decreasepct = scales::percent(decrease))

> top10
     ID   Zip Total2014 Total2017 Difference   decrease decreasepct
1   ZCT 44108     25122     22048       3074 0.12236287     12.24%
2 ZCTA5 43607     23547     21560       1987 0.08438442      8.44%
3 ZCTA5 44104     22479     20541       1938 0.08621380      8.62%

Обратите внимание, что при форматировании чисел в процентах столбец преобразуется в символ:

> class(top10$decreasepc)
[1] "character"

Данные

top10 <- read.table(text = "
ID Zip Total2014 Total2017 Difference  
ZCT 44108 25122 22048 3074
ZCTA5 43607 23547 21560 1987
ZCTA5 44104 22479 20541 1938", head = TRUE)
...