【问题标题】:R - Percentage of whole dataframe per columnR - 每列整个数据帧的百分比
【发布时间】:2021-12-13 02:12:16
【问题描述】:

我有一个数据框报告每个问题的答案计数(这只是其中的一部分),我想获得每个问题的答案百分比。我找到了 adorn_percentages,但它通过除以整个数据框的值来计算百分比,同时,我只想要每列的百分比。每列共有 2230 个答案。 我正在考虑使用 (x/2230)*100 之类的东西,但我不知道该怎么做。

df<-data.frame(q1=c(159,139,1048,571,93), q2=c(106,284,1043,672,125), q3=c(99,222,981,843,94))

   q1   q2  q3
1  159  106  99
2  139  284 222
3 1048 1043 981
4  571  672 843
5   93  125  94

【问题讨论】:

    标签: r dataframe percentage


    【解决方案1】:

    长度相同后我们可以用colSums做除法

    100 * df/colSums(df)[col(df)]
    

    或使用sweep

    100 * sweep(df, 2, colSums(df), `/`)
    

    或使用proportions

    df[paste0(names(df), "_prop")] <- 100 * proportions(as.matrix(df), 2)
    

    -输出

    > df
        q1   q2  q3   q1_prop   q2_prop   q3_prop
    1  159  106  99  7.910448  4.753363  4.421617
    2  139  284 222  6.915423 12.735426  9.915141
    3 1048 1043 981 52.139303 46.771300 43.814203
    4  571  672 843 28.407960 30.134529 37.650737
    5   93  125  94  4.626866  5.605381  4.198303
    

    【讨论】:

    • 这到底是什么人.. 我的大脑在爆炸,我用你简单的“比例”代码完成了这项工作。真的,谢谢。
    • 是的,我只需要等几分钟。另一个问题,一旦我用百分比建立了df,我可以合并两个dfs以获得一个带有百分比数字的df吗?
    • @FedeR 你可以cbindcbind(df, 100 * proportions(as.matrix(df), 2))
    • 或者按照更新后的帖子做作业
    【解决方案2】:

    您可以为每一列申请prop.table -

    library(dplyr)
    
    df %>% mutate(across(.fns = prop.table, .names = '{col}_prop') * 100)
    
    #    q1   q2  q3   q1_prop   q2_prop   q3_prop
    #1  159  106  99  7.910448  4.753363  4.421617
    #2  139  284 222  6.915423 12.735426  9.915141
    #3 1048 1043 981 52.139303 46.771300 43.814203
    #4  571  672 843 28.407960 30.134529 37.650737
    #5   93  125  94  4.626866  5.605381  4.198303
    

    【讨论】:

    • 我也喜欢你的方法,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2021-10-19
    • 2021-03-08
    • 2021-01-24
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多