首页 > 解决方案 > 如何获取df中所有分类变量的频率和百分比

问题描述

我的 df,Chap3,有大约 50 个分类变量。我想为每个包含百分比的分类变量生成一个频率表。下面的代码适用于单个 var bsex,但我无法弄清楚如何为所有分类变量重复它​​。已尝试使用 apply 、 usingselect_if(is.factor)等的变体,但无济于事。

    Chap3 %>% 
        count(bsex) %>% 
        mutate(percent = round(n / sum(n) * 100,1))

标签: rpercentagefrequency-analysis

解决方案


对于这种情况,最好以长格式获取分类数据。

library(dplyr)
library(tidyr)

Chap3 %>%
  pivot_longer(cols = where(is.factor)) %>%
  count(name, value) %>%
  group_by(name) %>%
  mutate(n = round(prop.table(n), 1)) %>%
  ungroup

#   name  value   n
#  <chr> <fct> <dbl>
#1 bsex      0   0.4
#2 bsex      1   0.6
#3 csex      0   0.5
#4 csex      1   0.5

数据

如果您以可重现的格式提供数据,则更容易提供帮助

set.seed(123)
Chap3 <- data.frame(id = 1:10, 
                    bsex = factor(sample(c(1, 0), 10, replace = TRUE)), 
                    csex = factor(sample(c(1, 0), 10, replace = TRUE)))

推荐阅读