Динамически генерировать R решеточный граф для многих полей - PullRequest
1 голос
/ 10 августа 2010

Мне интересно, возможно ли следующее.

У меня есть опрос с более чем 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, где я новичок.

1 Ответ

2 голосов
/ 10 августа 2010

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