【问题标题】:R Convert a datatable into percentage table columnwiseR将数据表按列转换为百分比表
【发布时间】:2021-09-25 07:36:22
【问题描述】:

我正在尝试将此表按列转换为百分比表。

Class Jan2021 Feb 2021
A 50 100
B 50 150
C 100 100

我期待这张桌子。

Class Jan2021 Feb 2021
A 25% 28.57%
B 25% 42.86%
C 50% 28.57%
x <- data.frame(class = c("A", "B", "C"),
                Jan2021 = c(50,50,100),
                Feb2021 = c(100,150,100))

我可以这样做,但我有很多不同名称的列/行。有没有更简单的方法来计算每列的百分比?

x_pct = mutate(x, 
            Jan_pct = Jan2021 / sum(Jan2021) *100,
            Feb_pct = Feb2021 / sum(Feb2021) *100)

【问题讨论】:

    标签: r dplyr datatable percentage


    【解决方案1】:

    您可以使用dplyr::mutate_if()scales::percent

    x %>% 
      mutate_if(endsWith(names(.),"2021"),function(x) x / sum(x)) %>% 
      mutate_if(endsWith(names(.),"2021"),scales::percent, accuracy = 0.01)
    

    输出:

      class Jan2021 Feb2021
    1     A  25.00%  28.57%
    2     B  25.00%  42.86%
    3     C  50.00%  28.57%
    

    【讨论】:

    • 注意mutate_if() 已被across() 弃用:x %&gt;% mutate(across(ends_with("2021"), function(x) x / sum(x)) %&gt;% ...
    • 不知道。谢谢告知
    【解决方案2】:

    你可以使用across -

    library(dplyr)
    
    x %>%  mutate(across(-class, ~paste(round(prop.table(.) * 100, 2), '%')))
    
    #  class Jan2021 Feb2021
    #1     A    25 % 28.57 %
    #2     B    25 % 42.86 %
    #3     C    50 % 28.57 %
    

    lapply 基数 R -

    x[-1] <- lapply(x[-1], function(x) paste(round(prop.table(x) * 100, 2), '%'))
    

    【讨论】:

      【解决方案3】:
      library(janitor)
      x %>%
        adorn_percentages("col") %>%
        adorn_pct_formatting(digits = 2)
      
      
       class Jan2021 Feb2021
           A  25.00%  28.57%
           B  25.00%  42.86%
           C  50.00%  28.57%
      

      【讨论】:

        猜你喜欢
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 2015-04-16
        相关资源
        最近更新 更多