2013-02-09 57 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