按类别计算比例并在ggplot中创建直方图

问题描述 投票:0回答:1

我有一些数据,希望计算出经历每个 h3ma 变量的比例,包括总体比例和按类别列中各自的“子组”细分的比例。

我的最终目标是生成如下图所示的图形。我之前只是手动一一计算比例,然后创建一个新的数据框,但必须有一种更有效的方法。

Data:
d <- structure(list(h3ma1_binary = c("1", "0", "1", "1", "0", "0", 
"0", "0", "1", "NA", "0", "1", "NA", "1", "1"), h3ma2_binary = c("0", 
"0", "0", "1", "NA", "0", "1", "NA", "0", "1", "NA", "0", "1", 
"1", "1"), h3ma3_binary = c("1", "1", "0", "0", "0", "0", "1", 
"1", "NA", "0", "1", "NA", "1", "0", "0"), h3ma4_binary = c("1", 
"0", "0", "0", "0", "0", "0", "0", "NA", "1", "1", "NA", "0", 
"0", "1"), race = c("White", "White", "Black", "Black", "White", 
"Hispanic", "White", "White", "Hispanic", "White", "Black", "White", 
"White", "Black", "White"), parent_welfare = c(0, 0, 0, 1, 0, 
1, 0, NA, 1, 1, 0, 1, NA, 1, 1), parent_dropout...7 = c(1, 0, 
1, 0, NA, 1, 1, 0, 1, 0, NA, 1, 1, 0, 1), parent_dropout...8 = c(1, 
0, 1, 0, NA, 1, 1, 0, 1, 0, NA, 1, 1, 0, 1)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -15L))

enter image description here

r ggplot2
1个回答
0
投票

你可以做这样的事情

library(dplyr)
nrows_d <- nrow(d)
d_long <-d |> mutate(welfare = ifelse(parent_welfare == 1, "Welfare", "Not welfare"),
            grad = ifelse(parent_dropout...8 == 1, "Drop out", "Graduates")) |>
     pivot_longer(values_to = "value",
                  names_to = "variable",
                  cols = c(race, welfare, grad))|>
     group_by(variable, value) |>
     summarize(proportion = n()/nrows_d) 

这将为您提供一个包含比例和标签的数据框。 然后使用

geom_cols()
制作图表。 如果需要,您可以过滤掉 NA。

© www.soinside.com 2019 - 2024. All rights reserved.