2010-08-10 5 views
1

Je me demande si ce qui suit est possible.Générer dynamiquement un graphe de réseau R pour de nombreux champs

J'ai un sondage avec plus de 100 questions, toutes catégoriques, recueillies dans 4 endroits. Toutes les questions sont étiquetées q1, q2 et ainsi de suite. Disons qu'il y en a 100 pour la 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 une question .

Je me demande s'il y a un programmatique façon de générer les histogrammes pour toutes 100 questions, donc je reste plus la pile de 4 histogrammes pour q1, puis à droite la pile de 4 histogrammes q2 et ainsi de suite. Certes, cela va être une longue ligne, mais c'est pour l'inspection visuelle seulement et pour repérer les zones initiales pour enquêter plus loin. Le défilement vers la droite me convient parfaitement, j'ai un moniteur à écran large, donc j'obtiendrai un nombre décent d'histogrammes en même temps.

Que les questions soient étiqueté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 alimenter ces noms de champ générés par programme dans ces commandes.

Suggestions sont appréciées. Je suis un programmeur, mais pas dans R où je suis un débutant.

Répondre

2

L'astuce consiste à obtenir les données dans le bon format. Vous voulez un cadre 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, le dessin 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) 
Questions connexes