2013-05-31 77 views
0

我有看起來像這樣的數據:轉換載體引入2D矩陣

total position division 
34  C  ATL 
34  C  CEN 
47  C  NE 
46  C  NW 
44  C  PAC 
42  C  SE 
57  D  ATL 
50  D  CEN 
44  D  NE 
52  D  NW 
42  D  PAC 
52  D  SE 
29  L  ATL 
34  L  CEN 
28  L  NE 
34  L  NW 
29  L  PAC 
24  L  SE 
26  R  ATL 
33  R  CEN 
25  R  NE 
29  R  NW 
24  R  PAC 
35  R  SE 

我希望將它轉變成一個卡方測試,然後可以使用2D矩陣。所以,我的輸入需要的樣子:

division  position 
      C  D  L  R 
ATL   34  57  29  26 
CEN   34  50  34  33 
NE   47  44  28  25 
NW   46  52  34  29 
PAC   44  42  29  24 
SE   42  52  24  35 

總之,我需要做的矢量列標題的一個值,而在其他向量行標題的值。應將每行中出現的總值移動到合成2D矩陣中的行和列標題的交點(例如,NE和D爲44)。

順序並不重要,任何矢量都可以是最終矩陣中的行或列,並且輸入始終有三列:total,foo和bar。

我該如何做到這一點?我討厭不得不使用R中的某些程序,而我在R方面的技能目前有些欠缺。

謝謝。

回答

4

這是一個基本的reshape問題(有關更多信息,請參見?reshape)。

使用基礎R,你可以做以下(假設你的數據被稱爲 「是myDF」):

> reshape(mydf, direction = "wide", idvar = "division", timevar = "position") 
    division total.C total.D total.L total.R 
1  ATL  34  57  29  26 
2  CEN  34  50  34  33 
3  NE  47  44  28  25 
4  NW  46  52  34  29 
5  PAC  44  42  29  24 
6  SE  42  52  24  35 

或者,你可以使用xtabs如下。對於給定的組合多個值將被總結:

> xtabs(total ~ division + position, mydf) 
     position 
division C D L R 
    ATL 34 57 29 26 
    CEN 34 50 34 33 
    NE 47 44 28 25 
    NW 46 52 34 29 
    PAC 44 42 29 24 
    SE 42 52 24 35 
+0

優秀,感謝您的及時答覆! – Uppsilon

3

這裏的另一種方法,通過只是讓一個矩陣:

matrix(df$total, ncol=4, dimnames=list(unique(df$division), unique(df$position))) 

##  C D L R 
## ATL 34 57 29 26 
## CEN 34 50 34 33 
## NE 47 44 28 25 
## NW 46 52 34 29 
## PAC 44 42 29 24 
## SE 42 52 24 35