我想知道以下是否可能。

我有一项调查,包含 100 多个问题,全部是分类问题,收集于 4 个地点。所有问题都标记为 q1、q2 等。为简单起见,假设有 100 个。

我可以直观地比较跨地点特定问题的结果:

library (lattice);
histogram(~ q75 | location, data = survey, layout=c(1,4));

或者,使用 ggplot2,

library (ggplot2);
qplot(q75, data=survey) + facet_grid(location ~ .);

这给出了 4 个垂直对齐的直方图, 问题。

我想知道是否有 程序化的 生成直方图的方法 全部 100 个问题,所以最左边我有 q1 的 4 个直方图堆栈,然后右边有 q2 的 4 个直方图堆栈,依此类推。当然,这将是一条很长的线,但这仅用于目视检查以及发现初始区域以进行进一步调查。向右滚动对我来说没问题,我有一台宽屏显示器,所以我可以一次获得相当数量的直方图。

问题用“q”+计数器标记是很好的。我不知道的是

  • 如何用晶格(或ggplot2?)制作这种图,它是一个二维晶格。
  • 如何将此类以编程方式生成的字段名称输入到这些命令中。

欢迎提出建议。我是一名程序员,但不是 R 领域的新手。

有帮助吗?

解决方案

诀窍在于以正确的格式获取数据。您想要一个包含 3 列的数据框:问题、位置和分数。(这 reshape 包可以帮助您操作数据集。)

n_questions <- 100
n_responses <- c(North = 89, East = 37, South = 57, West = 71)
n_locations <- length(n_responses)
total_responses <- sum(n_responses)

survey <- data.frame(
  question = unlist(lapply(n_responses, function(x) rep(seq_len(n_questions), each = x))),      
  location = rep(c("North", "East", "South", "West"), times = n_questions * n_responses),
  score = sample(n_questions, n_questions * total_responses, replace = TRUE)
)

之后,绘制直方图就很容易了。

格子:

library(lattice)
library(latticeExtra)
useOuterStrips(histogram(~ score | question * location, data = survey))

ggplot2:

library(ggplot2)
ggplot(survey, aes(score)) + geom_histogram() + facet_grid(location ~ question)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top