2013-02-09 11 views
5

Ecco il tipo di dati che sto importando un file CSV:ggplot: Boxplot della colonna di valori multipli

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 

Per ogni "ID", mi piacerebbe per generare un grafico a scatole per i valori in colonne "Freq", "Freq.1" e "Freq.2". Tuttavia, attualmente sono in grado di tracciare con successo un valore Y solo - ad esempio:

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

Ho provato qualcosa di simile y = c (Freq, Freq.1, Freq.2), ma questo risultato il seguente:

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

sono sicuro che c'è una semplice soluzione a questo, ma come io sono molto nuovo a R, non posso dire se si tratta di un problema di formato di dati sbagliato, sintassi sbagliata , pacchetto sbagliato o qualcos'altro interamente.

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

14

È necessario modificare la forma dei dati per tracciare.

Per prima cosa ho letto i tuoi dati. Si noti che alcuni valori sono 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) 

Utilizzando reshape2 ad esempio

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

Grazie. Questo è molto utile. Il mio obiettivo (forse formulato male) era quello di combinare tutti i valori (Freq, Freq.1, Freq.2) in una scatola. Ora vedo che questo può essere ottenuto eliminando la parte "color = variable" del codice. – Kappa