2014-10-28 61 views
-2

我正在尝试使用R盒图显示我的数据并卡住。我的数据如下所示:使用多个列中的因子的R盒图

id var.1 var.2 ... var.n value 
a 0  1  ... 2  1.7 
b 2  1  ... 0  1.4 
... ... ... ... ... ... 
a 1  2  ... 2  5.3 
b 1  2  ... 1  2.4 

现在,我想有一系列箱线图中:值〜var.1,值〜var.2,...,值〜var.n 最好一个GGPLOT2构面类型情节。我尝试使用融化,重塑和分惨败 - 将不胜感激有人用新鲜的心灵在这里得到了一丝......

我想整形的数据应该是这样的形式:

a var.1 0 1.7 
a var.2 1 1.7 
... 
b var.1 2 1.4 
b var.2 1 1.4 
... 

让我能看看列2 & 3的使用互动......

回答

1

也可以用熔体功能:

library(reshape2) 
melt(dat, id='value') 
      value variable value 
1 -0.11978146 var.1  1 
2 -0.78996525 var.1  1 
3 0.54246428 var.1  1 
4 0.09325227 var.1  1 
5 0.63954407 var.1  1 
6 1.48611802 var.1  1 
... 
+0

我将两个答案结合起来,是的,它现在可以工作!需要更多地使用reshape2。掌握有用的东西。 – kiero 2014-10-28 15:56:20

1

数据

set.seed(1) 
dat <- do.call(cbind.data.frame, rep(list(gl(3, 10)), 5)) 
names(dat) <- paste("var", 1:5, sep = ".") 
dat$value <- rnorm(30) 
head(dat) 
# var.1 var.2 var.3 var.4 var.5  value 
# 1  1  1  1  1  1 -0.6264538 
# 2  1  1  1  1  1 0.1836433 
# 3  1  1  1  1  1 -0.8356286 
# 4  1  1  1  1  1 1.5952808 
# 5  1  1  1  1  1 0.3295078 
# 6  1  1  1  1  1 -0.8204684 

方法

首先,我们需要将数据转换成ggplot可以方便地工作的东西。你可以使用reshape从基础包(addmitedly,该syntay是不言自明的,我需要做的我使用的语法尝试和错误每次):

datm <- reshape(dat, direction = "long", varying = paste("var", 1:5, sep = "."), 
       new.row.names = 1:((ncol(dat) - 1) * nrow(dat)), timevar = "i", 
       v.names = "x") 
head(datm) 
#  value i x id 
# 1 -0.6264538 1 1 1 
# 2 0.1836433 1 1 2 
# 3 -0.8356286 1 1 3 
# 4 1.5952808 1 1 4 
# 5 0.3295078 1 1 5 
# 6 -0.8204684 1 1 6 

现在,你可以做你的boxplot(value ~ x)通过的ggplot2方式:

library(ggplot2) 
ggplot(datm, aes(x = x, y = value)) + geom_boxplot() + facet_wrap(~i) 

enter image description here

是否回答你的问题?

+0

感谢名单!将两个答案组合成一个简单而有效的解决方案 – kiero 2014-10-28 15:56:51