R语言 创建包含多个变量计数的长数据框

fiei3ece  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(151)

我有以下 Dataframe (提供了dput):

structure(list(Poor_health = c(2, 1, 3, 2, 2, 2, 2, 1, 2, 2, 
2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 1, 4, 1, 1, 3, 2, 4, 
2, 3, 3, 3, 3, 4, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 4, 2, 4, 2, 4, 
2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 
2, 2, 4, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 4, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 
2, 1, 2, 2, 2, 2, 2, 2, 4, 1, 4, 4, 4, 2, 1, 2, 1, 4, 4, 1, 2, 
2, 2, 2, 1, 2, 2, 2, 3, 2, 2, 2, 2, 2, 4, 1, 2, 2, 4, 4, 2, 3, 
3, 2, 3, 2, 2, 2, 2, 2, 2), Family_breakdown = c(2, 3, 3, 3, 
2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 4, 4, 
3, 2, 2, 4, 3, 4, 2, 3, 3, 4, 3, 4, 3, 3, 1, 4, 1, 1, 1, 1, 1, 
1, 4, 2, 3, 4, 4, 3, 1, 3, 3, 1, 1, 2, 3, 1, 2, 3, 1, 3, 2, 2, 
2, 2, 3, 3, 3, 3, 2, 3, 4, 2, 2, 4, 2, 2, 3, 3, 2, 2, 4, 3, 2, 
2, 2, 3, 3, 3, 1, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 
2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 2, 2, 2, 4, 2, 4, 4, 4, 1, 4, 
4, 4, 4, 4, 1, 2, 3, 4, 4, 1, 3, 2, 3, 3, 2, 2, 4, 3, 3, 4, 2, 
2, 2, 3, 4, 2, 3, 3, 3, 3, 4, 3, 3, 3, 2, 3), Level_of_income = c(3, 
2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 3, 3, 3, 3, 1, 
2, 3, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 3, 2, 4, 1, 1, 
1, 1, 1, 1, 4, 2, 3, 1, 3, 4, 2, 1, 2, 1, 1, 2, 2, 2, 3, 2, 2, 
3, 3, 3, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 3, 2, 3, 1, 3, 2, 2, 
2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 1, 2, 4, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 4, 1, 4, 4, 
4, 1, 2, 4, 4, 4, 1, 1, 2, 4, 2, 4, 1, 3, 2, 3, 2, 2, 2, 2, 2, 
3, 2, 2, 2, 2, 2, 4, 2, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3), village_subvillage = c("TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "Mandugo", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "Mandugo", "TenaTeke", 
"TenaTeke", "Mandugo", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"Mandugo", "Mandugo", "Mandugo", "Mandugo", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", 
"TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke", "TenaTeke"
)), row.names = c(NA, -187L), class = c("tbl_df", "tbl", "data.frame"
))

抱歉的长度(在一个不幸的时间紧迫,让这张贴)。
我需要创建一个2x 3的面包裹的6个条形图集,其中面网格的两列包含两个村庄,面网格的三行包含三个变量(健康状况不佳、家庭破裂和收入水平)。
y轴需要显示三个变量中每个值的频率计数(因此很明显,x轴将包含数字1-5的5个bin)。
我怀疑第一步将是重塑数据。我昨天做了一件几乎完全一样的事情,没有问题,但我在这里有点挂断了。

wfsdck30

wfsdck301#

也许可以像这样使用tidyr::pivot_longer来重塑数据:

library(tidyr)
library(ggplot2)

dat |> 
  pivot_longer(-village_subvillage) |> 
  ggplot(aes(value, fill = factor(value))) +
  geom_bar() +
  facet_grid(name~village_subvillage) +
  theme(legend.position = "bottom")

相关问题