2013-02-09 4 views
5

Вот тип данных, которые я импортировать как CSV файл:ggplot: Boxplot кратных значений столбца

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», я хотел бы, чтобы сгенерировать boxplot для значений в столбцы «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, 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

Смежные вопросы