【问题标题】:What's the best approach for visualizing aggregated survey data (not tidy)? [closed]可视化汇总调查数据(不整洁)的最佳方法是什么? [关闭]
【发布时间】:2021-08-12 07:26:16
【问题描述】:

我正在使用的当前数据框的结构使得李克特量表响应标题构成列名,行名是与所问问题相关的人口统计数据。汇总了按人口统计的李克特反应。我希望将这些数据可视化(使用大量图表,每个图表都显示人口统计的 likert 数据)。

示例数据:

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(...)

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

【问题讨论】:

    标签: r ggplot2 reshape


    【解决方案1】:

    假设你的数据框的名字是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)
    

    输出:

    这是你想要的吗?

    【讨论】:

    • 是的 - 谢谢!
    • @ikeepwading 然后您可以验证答案;)因此人们也可以使用该解决方案 :)
    • 我刚做了。感谢您的帮助!
    【解决方案2】:

    看来您需要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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多