我有一些数据,希望计算出经历每个 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))
你可以做这样的事情
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。