将多个频率/计数列转换为百分比

时间:2017-04-17 13:21:01

标签: r dplyr

我有一个这样的数据框,按日列出了计数。

**Color**     **Monday** **Tuesday** **Wednesday**
Green            2            3           1
Orange           3            5           5
Blue             1            3           2
Red              4            5           1

我想要达到的是这样的。列是百分比。

**Color**     **Monday** **Tuesday** **Wednesday**
  Green            20%        20%       10%
  Orange           30%        30%       60%
  Blue             10%        20%       20%
  Red              40%        30%       10%

关于如何在不手动转换一次列的情况下如何执行此操作的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将mutate_if()与自定义功能结合使用,例如:

percent_mean <- function(x){
        m <- round(x/sum(x),2)*100
        return(paste0(m, sep = "%"))
}

library(dplyr)
df %>% mutate_if(is.numeric, funs(percent_mean))
#   Color Monday Tuesday Wednesday
#1  Green    20%     19%       11%
#2 Orange    30%     31%       56%
#3   Blue    10%     19%       22%
#4    Red    40%     31%       11%