2017-11-09 16 views
0

次のデータフレームがあるとします。複数レベルの行と列を持つRのデータフレーム

> df = data.frame(rowsA = sample(c('A','B','C'), 100, replace=TRUE), 
       rowsB = sample(c('D','E','F'), 100, replace=TRUE), 
       colsA = sample(c('G','H','I'), 100, replace=TRUE), 
       colsB = sample(c('J','K','L'), 100, replace=TRUE)) 

> head(df) 
    rowsA rowsB colsA colsB 
1  B  E  I  L 
2  A  E  G  J 
3  A  E  H  K 
4  A  D  I  J 
5  C  F  G  J 
6  A  F  G  J 

複数のレベルのテーブルを作成することはできますか? Excelで

、それは私がdf.columns.levels方法とパンダでpythonでそれが可能だと思うのピボットテーブル機能

enter image description here

で可能です。

IもdplyrのみRマルチレベル列を行う方法を考え出した(しかし、マルチレベル列を考え出していない)

df %>% 
    group_by(rowsA, rowsB, colsA) %>% 
    summarise(count = n()) %>% 
    spread(colsA, count) 

# A tibble: 9 x 5 
# Groups: rowsA, rowsB [9] 
    rowsA rowsB  G  H  I 
* <fctr> <fctr> <int> <int> <int> 
1  A  D  5  3  1 
2  A  E  1  2  1 
3  A  F  5  8 NA 
4  B  D  5  5  5 
5  B  E  2  4  6 
6  B  F  4  6  5 
7  C  D  2  6 NA 
8  C  E  6  5  3 
9  C  F  4  3  3 

答えて

1

一つの列にヘッダに移行列を貼り付け、その後、カウントされた方法で、あなたはマルチレベルと同じ意味を持つ分割表を持って、それを再構築:

library(dplyr); library(tidyr) 
df %>% 
    unite(header, c('colsA', 'colsB')) %>% 
    count(rowsA, rowsB, header) %>% 
    spread(header, n, fill = 0) 

# A tibble: 9 x 11 
# rowsA rowsB G_J G_K G_L H_J H_K H_L I_J I_K I_L 
#* <fctr> <fctr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
#1  A  D  1  0  0  0  3  1  1  1  0 
#2  A  E  2  0  0  1  1  0  0  0  1 
#3  A  F  5  0  0  3  2  1  0  1  1 
#4  B  D  0  1  1  1  0  3  1  1  1 
#5  B  E  2  2  1  3  1  1  0  3  1 
#6  B  F  1  1  2  3  3  0  1  2  1 
#7  C  D  0  2  3  1  2  0  4  3  2 
#8  C  E  2  2  2  1  2  0  0  1  1 
#9  C  F  1  0  1  2  0  1  2  1  2 

をそれとも、結果としてテーブル/配列/マトリックスでOKであれば、することができますを使用基本的に4次元配列を与えるが、ftableとのは、(this answerから借りた)、あなたが必要とするように表示することができます。

ftable(xtabs(data = df), row.vars = 1:2, col.vars = 3:4) 

#   colsA G  H  I  
#   colsB J K L J K L J K L 
#rowsA rowsB       
#A  D   1 0 0 0 3 1 1 1 0 
#  E   2 0 0 1 1 0 0 0 1 
#  F   5 0 0 3 2 1 0 1 1 
#B  D   0 1 1 1 0 3 1 1 1 
#  E   2 2 1 3 1 1 0 3 1 
#  F   1 1 2 3 3 0 1 2 1 
#C  D   0 2 3 1 2 0 4 3 2 
#  E   2 2 2 1 2 0 0 1 1 
#  F   1 0 1 2 0 1 2 1 2 
+0

私もそれはSASおよびSTATAで可能だと思います。多少なりとも驚いたのは、Rパッケージでは実装されていないということです。 – Lee88

+1

おそらくこれは[代替](https://stackoverflow.com/questions/30944281/r-multi-index-on-columns-and-orrows)です。 – Psidom

関連する問題