2013-05-28 27 views
2

我有這樣的數據幀:適用箱線到多個變量

set.seed(50) 
data <- data.frame(age=c(rep("juv", 10), rep("ad", 10)), 
        sex=c(rep("m", 10), rep("f", 10)), 
        size=c(rep("large", 10), rep("small", 10)), 
        length=rnorm(20), 
        width=rnorm(20), 
        height=rnorm(20)) 

    age sex size  length  width  height 
1 juv m large 0.54966989 -0.34992735 0.10955641 
2 juv m large -0.84160374 -0.58689714 -0.41341885 
3 juv m large 0.03299794 -1.58987765 0.11179591 
4 juv m large 0.52414971 1.68955955 -2.89232140 
5 juv m large -1.72760411 0.56358364 0.09534935 
6 juv m large -0.27786453 2.66763339 0.49988990 
7 juv m large 0.36082844 0.35653495 0.94937215 
8 juv m large -0.59091244 -0.36212039 -1.65840096 
9 juv m large 0.97559055 0.56874633 -1.48161964 
10 juv m large -1.44574995 0.02867454 -0.49068623 
11 ad f small 0.29520677 0.19902339 0.01475390 
12 ad f small 0.55475223 -0.85142228 0.33763747 
13 ad f small -0.49863554 -1.13044947 -1.96590570 
14 ad f small 0.19573384 0.59724896 -2.32077461 
15 ad f small -0.45554055 -1.09604786 0.99581082 
16 ad f small -0.36285547 0.01909655 1.16695158 
17 ad f small -0.15681338 0.41619898 -0.86517483 
18 ad f small -0.76525139 1.83967570 -1.39094651 
19 ad f small -1.16601736 0.40618657 -1.33263085 
20 ad f small -0.32342568 0.39322175 -0.13883976 

通過調用一個函數,我要爲每個的lengthwidthheight的箱線圖對的agesexsize每個級別。所以輸出應該是9個不同的小區(每一個9所繪製應包含2「盒子」的每個級別的

我試過這個功能:

exploreBoxplots <- function (dataframe, x.variables, y.variables) { 
    library(plyr); library(ggplot2) 
    xVariables <- list(x.variables) 
    yVariables <- list(y.variables) 
    llply(xVariables, function(x) ggplot(dataframe, aes(x, yVariables)) + 
      geom_boxplot()) 
} 

exploreBoxplots(data,c(data$age, data$sex, data$size), c(data$length, data$width, data$height)) 

...但是這給出了一個錯誤。我怎樣才能得到這個功能,使9個箱線圖?

回答

3

如果需要9個單獨地塊那麼我的做法是,首先,賣場爲x列和y列的變量名。

xVariables<-names(data[,1:3]) 
yVariables<-names(data[,4:6]) 

然後用expand.grid()組合所有變量,然後將列轉換爲字符。

gg<-expand.grid(xVariables,yVariables) 
gg<-data.frame(lapply(gg, as.character), stringsAsFactors=FALSE) 

現在您可以使用apply()來製作圖。重要的是使用aes_string(),因爲x和y值將作爲變量名提供。

apply(gg,1,function(x) ggplot(data,aes_string(x=x[1],y=x[2]))+geom_boxplot())