2016-04-06 2 views
0

Я изучил этот вопрос довольно немного и извинился, если я пропустил ответ, но я не могу найти ответ, свойственный моему сценарию. Я хотел бы создать 2 диаграммы (для каждого уровня Account: Dr и Cr) с 6 полевыми графиками, каждый из которых основывается на данных в трех столбцах. Данные аналогичны данным ниже (предположим, что существует шесть дат; 01/01/2016-06/01/2016):Как вы эффективно подмножите данные для диаграмм (например, ящиков) в R?

Date   Days  Acct 
01/01/16  7  Cr 
01/01/16  5  Dr 
02/01/16  6  Cr 
01/01/16  4  Dr 
02/01/16  6  Dr 

И давайте предположим, что продолжается в течение 1000 строк только 6 уникальных Дата значения и два значения учетной записи - Cr и Dr. Я объясню, что я сделал, чтобы получить диаграмму, но я знаю, что это не самый эффективный способ, потому что я на данный момент использую цикл for.

Я назначил данные Cr одному кадру данных, а затем данные Dr в другой фрейм данных. Затем я назначил уникальные значения Date из каждого фрейма данных в новые кадры данных. После этого я запустить цикл, чтобы создать фрейм данных для каждого значения даты и присваивают значения дня каждый, как показано ниже:

01/01/2016 (Data Frame 1, col A) 
5         
7         
6 

02/01/2016 (Data Frame 2, col A) 
3 
5 

Тогда я бег cbind.fill объединить все кадры данных в один с 6 столбцами, где Date является заголовком, а Days - значениями в строках. Я запускаю boxplot на этом фрейме данных.

Спасибо за помощь!

ответ

1

Хорошо, поэтому я надеюсь, что правильно интерпретирую ваш вопрос. Вам нужны две диаграммы (по 1 для каждого уровня Acct), каждая диаграмма должна иметь шесть ящиков (по одному ящику в день). Поскольку ваш набор данных не был достаточным для использования в качестве примера, я создал свой собственный и покажу, как сделать ящики с использованием ggplot2 и базой R.

library(ggplot2) 
set.seed(123) 
date_vec = seq(as.Date('2016/1/1'), as.Date('2016/1/6'), by = 'day') 
df = data.frame(
    Date = sample(date_vec, 1000, replace = T), 
    Days = rpois(1000, lambda = 2), 
    Acct = sample(c('Dr','Cr'), 1000, replace = T), 
    stringsAsFactors = FALSE 
) 
     Date Days Acct 
1 2016-01-02 1 Dr 
2 2016-01-05 2 Dr 
3 2016-01-03 1 Dr 
4 2016-01-06 3 Cr 
5 2016-01-06 3 Dr 
6 2016-01-01 2 Cr 

Вы можете использовать ggplot2 и facet_wrap по Acct:

ggplot(df, aes(x = factor(Date), y = Days))+ 
    geom_boxplot()+facet_wrap(~Acct)+theme_bw()+ 
    xlab('Date') 

enter image description here

Или мы можем сделать две панели boxplot в базе R:

par(mfrow = c(1,2)) #plot both simultaneously 
with(subset(df, Acct == 'Cr'), 
    boxplot(Days~Date, main = 'Cr Boxplots')) 
with(subset(df, Acct == 'Dr'), 
    boxplot(Days~Date, main = 'Dr Boxplots')) 

enter image description here

Очевидно, вам нужно будет поиграть с ярлыками оси х, чтобы получить более информативную диаграмму. Надеюсь, это поможет.

+0

Ничего себе! Очевидно, мне нужно много узнать о R! Спасибо, bouncyball! Был ли я прав, что в этом сценарии мало информации, или я просто не исследовал его правильно? –

+0

Я думаю, что если вы потратили некоторое время на некоторые функции «R», такие как 'with',' subset' и класс функций '* apply', это могло бы помочь вам. Конечно, SO всегда отличный ресурс! – bouncyball