如何将数字格式化为百分比并限制小数位数

How to format a number as a percentage and limit number of decimal places

示例数据、操作等如下。我的问题涉及其中包含滞后函数的第 4 部分。期望的结果是区域 001 和 smb 1 的 empprevyearpct(是的,我知道它实际上是一个季度)值显示为 4.35% 而不是 .04347826。我一直在尝试这样做,使用天平无法弄清楚如何将数字放在小数点的右边,并将其转换为百分比。

library(readxl)
library(dplyr)
library(data.table)
library(odbc)
library(DBI)
library(stringr)

 employment <- c(1,45,125,130,165,260,600,2,46,127,132,167,265,601,50,61,110,121,170,305,55,603,66,112,123,172,310,604)
 small <- c(1,1,2,2,3,4,NA,1,1,2,2,3,4,NA,1,1,2,2,3,4,NA,1,1,2,2,3,4,NA)
 area <-c(001,001,001,001,001,001,001,001,001,001,001,001,001,001,003,003,003,003,003,003,003,003,003,003,003,003,003,003)
 year<-c(2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020)
 qtr <-c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2)

 smbtest <- data.frame(employment,small,area,year,qtr)

 smbtest$smb <-0

 smbtest <- smbtest %>% mutate(smb = case_when(employment >=0 & employment <100 ~ "1",employment >=0 
 & employment <150 ~ "2",employment >=0 & employment <250 ~ "3", employment >=0 & employment <500 ~ 
 "4"))


smbsummary2<-smbtest %>% 
mutate(period = paste0(year,"q",qtr)) %>%
select(area,period,employment,smb) %>%
group_by(area,period,smb) %>%
summarise(employment = sum(employment), worksites = n(), 
        .groups = 'drop_last') %>% 
mutate(employment = cumsum(employment),
     worksites = cumsum(worksites))

smbsummary2<- smbsummary2%>%
group_by(area,smb)%>%
mutate(empprevyear=lag(employment),
     empprevyearpp=employment-empprevyear,
     empprevyearpct=((employment/empprevyear)-1))


 smblonger2<-smbsummary2 %>%
 ungroup() %>%
 pivot_longer(cols = employment:worksites, names_to = "measure", values_to = "value") %>%
 group_by(area,measure) %>%
 pivot_wider(names_from = period, values_from = value) %>% gt()

你可以使用 scales::percent()

smbsummary2<- smbsummary2%>%
  group_by(area,smb)%>%
  mutate(empprevyear=lag(employment),
         empprevyearpp=employment-empprevyear,
         empprevyearpct=((employment/empprevyear)-1), empprevyearpct=scales::percent(empprevyearpct)
         )

输出:

    area period smb   employment worksites empprevyear empprevyearpp empprevyearpct
   <dbl> <chr>  <chr>      <dbl>     <int>       <dbl>         <dbl> <chr>         
 1     1 2020q1 1             46         2          NA            NA NA            
 2     1 2020q1 2            301         4          NA            NA NA            
 3     1 2020q1 3            466         5          NA            NA NA            
 4     1 2020q1 4            726         6          NA            NA NA            
 5     1 2020q1 NA          1326         7          NA            NA NA            
 6     1 2020q2 1             48         2          46             2 4%            
 7     1 2020q2 2            307         4         301             6 2%            
 8     1 2020q2 3            474         5         466             8 2%            
 9     1 2020q2 4            739         6         726            13 2%            
10     1 2020q2 NA          1340         7        1326            14 1%            
11     3 2020q1 1            166         3          NA            NA NA            
12     3 2020q1 2            397         5          NA            NA NA            
13     3 2020q1 3            567         6          NA            NA NA            
14     3 2020q1 4            872         7          NA            NA NA            
15     3 2020q2 1             66         1         166          -100 -60%          
16     3 2020q2 2            301         3         397           -96 -24%          
17     3 2020q2 3            473         4         567           -94 -17%          
18     3 2020q2 4            783         5         872           -89 -10%          
19     3 2020q2 NA          1990         7          NA            NA NA   

您可以从 scales package 开始尝试 percent()。您还可以按如下方式设置数字:percent(x, accuracy = 0.01)。注:0.1=1位,0.01=2位,0.001=3位,依此类推