1

我想知道以下是否可能。

我有一个包含 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 中。

4

1 回答 1

2

诀窍是以正确的格式获取数据。您需要一个包含 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)
于 2010-08-10T12:56:33.087 回答