Question

Je me demande si ce qui suit est possible.

J'ai une enquête avec plus de 100 questions, tous catégoriques, recueillies dans 4 endroits. Toutes les questions sont étiquetés q1, q2 et ainsi de suite. Disons qu'il ya 100 pour plus de simplicité.

Je peux comparer visuellement les résultats d'une question particulière dans les endroits avec:

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

ou, avec ggplot2,

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

Cela donne 4 histogrammes, alignées verticalement, pour un question.

Je me demande s'il y a un programmatique façon de générer les histogrammes pour tous 100 questions, donc plus à gauche j'ai la pile de 4 histogrammes pour q1, puis au droit de la pile de 4 histogrammes pour q2 et ainsi de suite. Certes, il va être une longue ligne, mais est pour l'inspection visuelle seulement et pour repérer les zones initiales d'étudier plus avant. Faire défiler vers la droite est très bien avec moi, j'ai un moniteur grand écran donc je vais obtenir un nombre décent de Histogrammes Encastrement à un moment donné.

Que les questions sont marquées avec « q » + un compteur est bon. Ce que je ne sais pas est

  • comment faire ce genre de terrain avec treillis (ou ggplot2?), Il est un réseau bi-dimensionnelle.
  • comment nourrir les noms de champ par programmation générés dans ces commandes.

Les suggestions sont appréciés. Je suis un programmeur, mais pas dans R où je suis un débutant.

Était-ce utile?

La solution

L'astuce consiste à obtenir les données dans le format correct. Vous voulez une trame de données avec 3 colonnes: la question, l'emplacement et le score. (Le paquet reshape peut vous aider à manipuler votre ensemble de données.)

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

Après cela, tirer les histogrammes sont faciles.

réseau:

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

ggplot2:

library(ggplot2)
ggplot(survey, aes(score)) + geom_histogram() + facet_grid(location ~ question)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top