2010-08-10 5 views
1

Мне интересно, возможно ли следующее.Динамически сгенерируйте граф решетки R для многих полей

У меня есть опрос, содержащий 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 вопросов, поэтому оставил большинство у меня стек из 4 гистограмм q1, затем вправо стек 4 гистограмм для q2 и т. д. Конечно, это будет длинная линия, но это только для визуального осмотра и для определения начальных областей для дальнейшего изучения. С прокруткой вправо все в порядке со мной, у меня широкоэкранный монитор, поэтому я получаю приличное количество гистограмм, подходящих за один раз.

Чтобы вопросы были помечены знаком «q» +, это хорошо. Я не знаю

  • Как сделать такой вид участка с решеткой (или ggplot2?), Это двумерная решетка.
  • как передать такие программно сгенерированные имена полей в эти команды.

Предложения приветствуются. Я программист, но не в R, где я новичок.

ответ

2

Хитрость заключается в том, чтобы получить данные в правильном формате. Вам нужен кадр данных с тремя столбцами: вопрос, местоположение и оценка. (Пакет 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)