2016-04-06 2 views
0

私はこの質問をかなり研究して謝罪しましたが、答えが見つからない場合は私のシナリオに固有の答えが見つからないようです。私は3つの列のデータに基づいてそれぞれ6つのボックスプロットで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 

とのは、それが唯一の6ユニークな日で1,000行のために行くとしよう値と2つのアカウント値 - CrとDr.私はグラフを得るために何をしたのか説明しますが、私は現時点でforループを使用しているので、最も効率的な方法ではないことが分かります。

私はCrデータを1つのデータフレームに割り当て、次にDrデータを別のデータフレームに割り当てました。次に、各データフレームから新しいデータフレームに固有の日付値を割り当てました。その後、私は、それぞれの日付値のデータフレームを作成し、以下に示すようにそれぞれに日の値を割り当てるためにループのために実行します。

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

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

その後、私は1つに、すべてのデータフレームを結合するcbind.fillを実行します6つの列があり、Dateはヘッダーで、Daysは行の値です。そのデータフレームにboxplotを実行します。

ありがとうございました!

答えて

1

申し訳ありませんので、あなたの質問を正しく解釈していただきたいと思います。 2つのチャート(Acctの各レベルごとに1つ)が必要な場合、各チャートには6つのボックスプロット(日付ごとに1つのボックス)が必要です。あなたのデータセットは例として使用するのに十分ではなかったので、自分自身で作成し、ボックスプロットを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 

あなたはAcctによってggplot2facet_wrapを使用することができます。

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

enter image description here

それとも、我々はベースRに2つのパネル箱ひげ図を作成することができます。

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

明らかに、より有益なグラフを表示するには、x軸のラベルを使用する必要があります。私はこれが役立つことを願っています

+0

うわー!明らかに、私はまだRについて学ぶ必要があります!ありがとう、バウンシーボール!私はこのシナリオに関してオンラインではあまりないことを訂正しましたか、それとも正しく研究していませんでしたか? –

+0

私はあなたがいくつかの 'R'関数、' with'、 'subset'、' * apply'クラスの関数を見れば、あなたを助けるかもしれないと思っています。もちろん、SOはいつも素晴らしいリソースです! – bouncyball

関連する問題