从Dataframe为多个选定列创建百分比表

时间:2016-10-10 18:09:30

标签: r dataframe percentage

我有一个如下所示的数据框:

 COLA     COLB    COLC   COLD     COLE      
 Name1    yes      A      AB      uno
 Name2    yes      B      AC      dos
 Name3    no       C      AB      tres
 Name4    no       D      AC      cuatro

如何创建一个比例数据框,显示每个选定列值的百分比以及频率:

ATTRIBUTE   Percentages      Frequency       
*COLB*      *Percentage*     *Amount*
yes         50%              2
no          50%              2
*COLC*      *Percentage      *Amount*
A           25%              1
B           25%              1
C           25%              1
D           25%              1
*COLD*      *Percentage*     *Amount*
AB          50%              2
AC          50%              2

它不需要看起来完全像这样但我需要它在一个数据帧中并且仅包括所提到的选定列。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

dat <- data.frame(COLA=paste0("name",1:4),
                  "COLB"=c("yes", "yes", "no", "no"))

require(purrr)
col_to_stat <- function(col){
  tmp <- table(col)
  data.frame(ATTRIBUTE = names(tmp), Percentages = c(tmp/length(col)), Frequency = c(tmp),
             stringsAsFactors = FALSE)
}
map_df(dat, col_to_stat, .id="col")

这给了你:

   col ATTRIBUTE Percentages Frequency
1 COLA     name1        0.25         1
2 COLA     name2        0.25         1
3 COLA     name3        0.25         1
4 COLA     name4        0.25         1
5 COLB        no        0.50         2
6 COLB       yes        0.50         2

如果要打印百分比而不是小数,请查看: How to format a number as percentage in R?

P.S。:如果您使用tibble代替data.frame,则可以使用以下更短的内容:

tibble(ATTRIBUTE = names(tmp), Percentages = tmp/length(col), Frequency = tmp)