2011-07-03 23 views
1

我有一個MCMC算法中的迭代陣列。這些行代表分佈的繪製。列代表分佈中的參數(變量)。爲了便於說明:假定兩個變量,五次迭代。所以,我有:R:{reshape}:(melt.data.frame)如何複製列?

> draws <- data.frame(iteration = c(1:5), 
         alpha  = rnorm(5,0,1), 
         beta  = rnorm(5,0,1)) 

    iteration  alpha  beta 
1   1 -0.3157940 0.2122465 
2   2 1.0087298 -0.2346733 
3   3 1.0366165 0.3472915 
4   4 -2.4256564 0.9863279 
5   5 -0.6089072 -1.1213000 

當我融化的數據集,我得到:

> melt(draws) 
Using as id variables 
    variable  value 
1 iteration 1.0000000 
2 iteration 2.0000000 
3 iteration 3.0000000 
4 iteration 4.0000000 
5 iteration 5.0000000 
6  alpha -0.1042616 
7  alpha 1.0707001 
8  alpha 0.2166865 
9  alpha 0.0771617 
10  alpha -0.8893614 
11  beta -0.4846693 
12  beta -1.5950729 
13  beta -0.7178340 
14  beta 1.0149766 
15  beta -0.3128256 

但我想保持迭代出來讓我得到(手動編輯)相當於:

> melt(draws) 
Using as id variables 
    iteration variable  value 
1   1  alpha -0.1042616 
2   2  alpha 1.0707001 
3   3  alpha 0.2166865 
4   4  alpha 0.0771617 
5   5  alpha -0.8893614 
6   1  beta -0.4846693 
7   2  beta -1.5950729 
8   3  beta -0.7178340 
9   4  beta 1.0149766 
10   5  beta -0.3128256 

回答

7

供應id變量melt

melt(draws, id = "iteration") 

給出:

iteration variable  value 
1   1 alpha -0.02765436 
2   2 alpha -1.42138702 
3   3 alpha 0.83525096 
4   4 alpha -1.10677555 
5   5 alpha 0.72465936 
6   1  beta 0.59269720 
7   2  beta -0.32164072 
8   3  beta -1.31097204 
9   4  beta 0.94993620 
10   5  beta 0.20919169 
2

呸。我總是問一個問題找到答案之前...

我一直在讀help(melt.array),但是當我轉換爲data.frame,報我的問題,它最終導致我在help(melt.data.frame)答案。

爲了得到我想要的,我會用什麼:

myMelt <- melt(draws, id.var = "iteration"); 

所以,我可以再作多方面的情節:

ggplot(myMelt, aes(x = iteration,y = value)) + geom_point() + stat_smooth() + facet_grid(variable ~ ., scales="free")

enter image description here