Гистограмма Условно для подмножества данных в R

Я новичок в R (особенно в его графических пакетах), и у меня возникла проблема с созданием условных гистограмм.

Учитывая гипотетический кадр данных df:

df<-as.data.frame(cbind(y=c(1:5),a=c(1,1,2,2,3),b=c(2,3,3,4,5), c=c(3,4,5,6,7)))

Я хотел бы создать гистограммы y в зависимости от уникальных комбинаций a, b и c:

groups<-unique(cbind(df$a,df$b,df$c))

(Я понимаю, что гистограммы с использованием этого конкретного фрейма данных не имеют особого смысла, но для простоты и краткости это сработает)

Я, конечно, мог бы посмотреть на уникальные значения моих обусловливающих переменных и написать код для каждой отдельной гистограммы, но я хотел бы автоматизировать процесс примерно так:

library(lattice)
for (i in 1:5) {    #for the 5 unique groups
    histogram(~y | a==groups[i,1] & b==groups[i,2] & c==groups[i,3], data=df)
    dev.new()
}

Этот код выполняется и открывает правильное количество графических окон, но ничего не выводит. Кроме того, если есть аргумент для добавления к функции гистограммы, которая заставит вывод отображаться только при выполнении условия (вместо отображения обеих панелей TRUE и FALSE), мне было бы интересно узнать и об этом.

Спасибо.


person ander2ed    schedule 12.12.2014    source источник


Ответы (1)


Просто переместите мой комментарий в ответ. Это очень легко сделать в ggplot, используя facet_wrap.

library(ggplot2)
ggplot(df, aes(x = y)) +
    geom_histogram() + 
    facet_wrap(~ a + b + c)

Отображение графиков в разных окнах не будет встроено в ggplot. Для этого я, наверное,

#create a grouping variable
df$group = paste(df$a, df$b, df$c)

# split the data frame
df.list <- split(df, df$group)

# apply a function to each piece
lapply(df.list, FUN = function(data) print(qplot(data$y)))

С помощью метода разделения и наложения вы можете легко определить любую функцию, которую хотите, hist(), histogram() и т. д. С вашими текущими данными hist() просто показывает вам один прямоугольник, но с большим количеством данных это будет выглядеть правильно.

person Gregor Thomas    schedule 12.12.2014
comment
Спасибо. Я немного посмотрел на пакет ggplot2, но я очень незнаком с ним. Есть ли способ отображать гистограммы в отдельных окнах, используя этот подход? - person ander2ed; 13.12.2014
comment
Если бы вы заставили грани быть 1 x 1 и делали это на многостраничном устройстве, вы бы получили графики на отдельных страницах. - person IRTFM; 13.12.2014