2013-02-09 202 views
5

这里是数据的我正在导入作为csv文件类型:ggplot:多列的箱线图值

RPID mm ID Time Freq Freq.1 Freq.2 
RPO483 1 B6AC 5 23301 30512 
RPO483 1 B6AC 25 19  17 
RPO244 1 B6C  5 14889 20461 
RPO244 1 B6C  25 81  86 
RPO876 1 G3G3A 5 106760 59950 103745 
RPO876 1 G3G3A 25 4578 38119 37201 
RPO876 7 F3G3A 5 205803 148469 173580 
RPO876 7 F3G3A 25 28648 30321 26454 
RPO939 7 F3E324A 5 242285  
RPO939 7 F3E324A 25 42837  
RPO934 7 F3E325A 5 242001 129272 112371 
RPO934 7 F3E325A 25 73057 58685 66582 

对于每个“ID”,我想以产生用于在值的箱线图列“Freq”,“Freq.1”和“Freq.2”。不过,目前我只能够成功地绘制一个Y值 - 例如:

dataset <- read.csv("~/R/dataset.csv") 
library(ggplot2) 
p <- ggplot(dataset) 
p + geom_boxplot(aes(x=ID, y=Freq, color=mm)) 

我已经试过像Y = C(频率,Freq.1,Freq.2),但这个结果如下所示:

Error: Aesthetics must either be length one, or the same length as the dataProblems:ID 

我敢肯定有一个简单的解决这个,但我很新的R,我不能告诉 如果是错误的数据格式的问题,错误的语法,错误的包或其他东西完全。

任何帮助将不胜感激!

回答

14

您需要重塑数据才能绘制。

首先我读你的数据。请注意,您有一些NA值。

dat <- read.table(text = ' 
RPID mm ID Time Freq Freq.1 Freq.2 
RPO483 1 B6AC 5 23301 30512 
RPO483 1 B6AC 25 19  17 
RPO244 1 B6C  5 14889 20461 
RPO244 1 B6C  25 81  86 
RPO876 1 G3G3A 5 106760 59950 103745 
RPO876 1 G3G3A 25 4578 38119 37201 
RPO876 7 F3G3A 5 205803 148469 173580 
RPO876 7 F3G3A 25 28648 30321 26454 
RPO939 7 F3E324A 5 242285  
RPO939 7 F3E324A 25 42837  
RPO934 7 F3E325A 5 242001 129272 112371 
RPO934 7 F3E325A 25 73057 58685 66582',head=T, fill=T) 

使用reshape2例如

library(reshape2) 
dat.m <- melt(dat,id.vars='ID', measure.vars=c('Freq','Freq.1','Freq.2')) 
library(ggplot2) 
p <- ggplot(dat.m) + 
     geom_boxplot(aes(x=ID, y=value, color=variable)) 

enter image description here

+0

谢谢。这非常有帮助。我的目标(也许措辞不佳)是将所有值(Freq,Freq.1,Freq.2)合并到一个框中。我现在看到这可以通过消除代码中的“color = variable”部分来完成。 – Kappa 2013-02-09 21:09:22