直方图条件R中的数据子集

时间:2014-12-12 22:48:03

标签: r conditional histogram

我是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)))

我想根据a,b和c的唯一组合创建y的直方图:

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窗格),我也有兴趣学习它。

谢谢。

1 个答案:

答案 0 :(得分:0)

将我的评论转移到答案。使用facet_wrap在ggplot中这很容易。

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)))

使用split和lapply方法,您可以轻松定义所需的任何函数,hist()histogram()等。使用当前数据hist()只显示一个矩形,但如果有更多数据,它看起来是正确的。