可视化聚合调查数据(不整洁)的最佳方法是什么?

What's the best approach for visualizing aggregated survey data (not tidy)?

我正在使用的当前数据框的结构使得列名形成李克特量表响应标题,行名是与所问问题相关的人口统计数据。汇总人口统计的李克特回答。我正在寻找可视化这些数据(有很多图表,每个图表都显示人口统计的李克特数据)。

示例数据:

Demographic     Strongly_Disagree   Disagree   Neutral   Agree   Strongly_Agree
Male                    255             327       455     222         456
Female                  331             387       225     548         346     
Age 18-25               111             189       547     865         456
Age 25-39               564             324       443     786         904
Age 40-55               407             372       436     784         432

这不是真实数据(因为它有些私密),但这是一种格式,其中针对每个问题汇总了每个人口统计群体的答复数量。

我想做的是在 ggplot 中可视化这些数据,我在其中构建了 5 个单独的条形图(男性、女性和 3 个年龄组),每个图表包含 5 个条形图,对应于李克特量表响应。条形高度将对应于响应的总数量。

例如,我希望第一个图表显示对于男性,255 位受访者回答“非常不同意”,327 人回答“不同意”,455 人回答“中立”,22 人回答“同意”,456 人回答“非常不同意” “非常同意。”

有没有一种不用显着重构数据就可以做到这一点的好方法?

伪代码:

ggplot(data = df, aes(x = df(, 2:5), y = df[2:5,])) +
geom_bar(...)

任何正确方向的建议或指示将不胜感激。谢谢!

您似乎需要 melt 表单 data.table(或 reshape2

library(dplyr)
library(data.table)

df <- read.table(text = "Demographic     'Strongly_Disagree'  Disagree  Neutral  Agree  'Strongly Agree'
Male                    255             327       455     222         456
Female                  331             387       225     548         346     
'Age 18-25'               111             189       547     865         456
'Age 25-39'               564             324       443     786         904
'Age 40-55'               407             372       436     784         432",  header =T)

df <- df %>% 
  as.data.table() %>% ##conv to data.table
  melt(variable.name = "var", value.name = "val", id.var = 'Demographic')

library(ggplot2)
ggplot(data = df[Demographic == "Male"], aes(x = var, y = val)) + geom_point()

假设您的数据框名称是 data

library(ggplot2)    
library(dplyr)
library(data.table)

data<- data%>%  melt(variable.name = "var", value.name = "val", id.var = 'Demographic')

ggplot(df, aes(x = var, y =val,fill=var))+
  geom_bar(stat = 'identity')+
  facet_grid(. ~Demographic)

输出:

这是你想要的吗?