代码之家  ›  专栏  ›  技术社区  ›  George

在分类数据中查找百分比

  •  0
  • George  · 技术社区  · 3 年前

    我想计算分类数据的百分比。

    我有以下数据集。

    library(tidyverse)
    
    tib <- tibble(a = c("yes", "yes", "yes", "yes"),
                  b = c("yes", "yes", "no", "yes"),
                  c = c("AB", "yes", "AC", "no"),
                  d = c("AC", "yes", "no", "AB"),
    )             space = c("UP", "DO", "UP", "TA")
    

    例如,如果我们想了解“a”:

    df_perc <- as.data.frame(prop.table(table(tib$space, tib$a)) * 100)
    

      Var1 Var2 Freq
    1   DO  yes   25
    2   TA  yes   25
    3   UP  yes   50
    

    这是正确的。

    现在,为了避免对每一列都这样做,我尝试使用gather:

    df_tidy <- tib %>%
        gather(key="let", value="response", -"space")
       
    

    然后这样做:

    df_perc <- as.data.frame(prop.table(table(df_tidy$let, df_tidy$response)) * 100)
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   DaveArmstrong    3 年前

    tib %>% pivot_longer(-space, names_to = "vars", values_to="vals") %>% 
      group_by(space, vars, vals) %>% count() %>%
      ungroup %>% 
      group_by(vars) %>% 
      mutate(pct = (n/sum(n))*100) %>% 
      select(-n) %>% 
      pivot_wider(names_from="vars", values_from="pct", values_fill=0) 
    # # A tibble: 8 x 6
    #   space vals      a     b     c     d
    #   <chr> <chr> <dbl> <dbl> <dbl> <dbl>
    # 1 DO    yes      25    25    25    25
    # 2 TA    yes      25    25     0     0
    # 3 TA    no        0     0    25     0
    # 4 TA    AB        0     0     0    25
    # 5 UP    yes      50    25     0     0
    # 6 UP    no        0    25     0    25
    # 7 UP    AB        0     0    25     0
    # 8 UP    AC        0     0    25    25