2015-08-06 2 views
1

У меня есть кадр данных, который выглядит как этотКак сделать beanplot только для подмножества данных

 stream n rates  means column value truevalue 
1 Brooks 3 3.0 0.9629152 1 0.42707006 0.9440620 
2 Siouxon 3 3.0 0.5831929 1 0.90503736 0.5858527 
3 Speelyai 3 3.0 0.6199235 1 0.08554021 0.5839844 
4 Brooks 4 7.5 0.9722707 1 1.43338843 0.9440620 
5 Siouxon 4 7.5 0.5865031 1 0.50574543 0.5858527 
6 Speelyai 4 7.5 0.6118634 1 0.32252396 0.5839844 
7 Brooks 5 10.0 0.9637475 1 0.88984211 0.9440620 
8 Siouxon 5 10.0 0.5804420 1 0.47501800 0.5858527 
9 Speelyai 5 10.0 0.5959238 1 0.15079491 0.5839844 

и продолжается в 56000 строк. Я пытаюсь сделать beanplot, и я хотел бы сделать 3 разных beanplots, по одному для каждого потока. Я предпочел бы не подмножать этот фрейм данных для создания 3 новых/отдельных кадров данных. Есть ли способ указать, что вы хотите beanplot для stream=="Brooks"?

вот что у меня есть

beanplot(error~rates, data= result, col=c("orange", "black", "white", "red"), border ="pink", what=c(0,1,1,1), maxstripline=.05)

, который работает, но делает beanplot для всех данных. Я попробовал это, не работает

beanplot(error~rates, data= result[stream=="Speelyai"], col=c("orange", "black", "white", "red"), border ="pink", what=c(0,1,1,1), maxstripline=.05)

+0

Я думаю, вам просто нужно добавить 'result $' к вашему подмножеству в вызове данных, например 'data = result [result $ stream ==" Speelyai "]'. – ulfelder

ответ

3

Попробуйте это:

beanplot(error~rates, data= result[result$stream=="Speelyai", ], col=c("orange", "black", "white", "red"), border ="pink", what=c(0,1,1,1), maxstripline=.05) 
1

Я думаю так:

beanplot(error~rates, data= result[result[,"stream"]=="Speelyai",], col=c("orange", "black", "white", "red"), border ="pink", what=c(0,1,1,1), maxstripline=.05) 

Или, если вы хотите что-то более компактное, попробуйте использовать data.table , Более компактный в плане Подменит, как только вы получите его настроить (вы можете сделать это без установки ключа первых и по-прежнему будет более компактным, но немного медленнее):

# load package 
library(data.table) 

# convert to data.table, and set key for subsetting 
result <- as.data.table(result) 
setkey(result, stream) 

# save your original plotting code (minus the data part) as an expression 
original.plot <- expression(beanplot(error~rates, col=c("orange", "black", "white", "red"), border ="pink", what=c(0,1,1,1), maxstripline=.05)) 

# make the plot for this stream only 
result["Speelyai", eval(original.plot)] 

Тогда, если вы хотите, чтобы сделать сюжет для этих 3-х потоков, вы могли бы сделать что-то вроде

par(mfrow=c(2,2)) # I'm doing 4 panels just so it's a square; 1 will be empty 
result[c("Brooks","Siouxon","Speelyai"), eval(original.plot), by=c("stream")] 

это может занять некоторое время, чтобы привыкнуть к data.table, но он имеет тенденцию быть очень удобные обозначения и очень быстро. Очень удобно для подмножества или выполнения задачи для нескольких подмножеств.

+0

@Christopher Обратите внимание, что 'data.table' упрощает расширение подхода к созданию графика для каждого потока. Вы можете сделать первый способ в цикле 'for()', если хотите. – rbatt

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