2014-12-12 4 views
0

Я новичок в 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))) 

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

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-панелей), мне также было бы интересно узнать об этом.

спасибо.

ответ

0

Просто передайте свой комментарий к ответу. Это действительно легко в 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))) 

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

+0

спасибо. Я немного посмотрел на пакет ggplot2, но я очень не знаком с ним. Есть ли способ отображения гистограмм в отдельных окнах с использованием этого подхода? – ander2ed

+0

См. Правки для получения их по одному – Gregor

+0

Если вы вынудили грани 1 x 1 и делали это в многостраничном устройстве, вы бы получили графики на отдельных страницах. –

Смежные вопросы