2015-06-19 23 views
7

In python e in particolare in pandas, posso lavorare con MultIndex su righe o colonne. Esiste un equivalente in R? Stavo controllando diversi tutorial, come quello in https://en.wikibooks.org/wiki/R_Programming/Working_with_data_frames, ma non sono riuscito a trovare un equivalente R corretto.R: multiindice su colonne e/o righe

Come esempio ho il seguente frame di dati:

A-1 A-2 B-1 B-2 
0 1 2 0 1 
1 2 0 1 3 
2 4 1 3 2 

voglio farlo sembrare come:

A   B 
    1 2 1 2 
0 1 2 0 1 
1 2 0 1 3 
2 4 1 3 2 

Altre risposte importanti che ho trovato da StackOverflow

  1. Set columns as index
  2. Paste multiple columns to an index
+0

http://stackoverflow.com/questions/17560683/create-a-table-in-r-with-header-expanding-on-two-columns- using-xtable-or-any-pac – user227710

+2

La potenza di 'MultiIndex' è una delle ragioni per cui python/pandas è talvolta preferibile a R per la manipolazione dei dati. 'R' non supporta lo stesso tipo di indicizzazione gerarchica. – tegancp

+0

@ user227710 Sembra promettente. questo pacchetto 'tables' ti permette anche di fare un multi-index sulle righe? – goofd

risposta

6

Dato che stavate cercando un "lavoro intorno", vi darò uno sicuramente limitato. Gli array in R possono contenere solo una modalità (che contrariamente alla comprensione della maggior parte delle persone possono includere liste)

> arr1 <- matrix(scan(), 3,byrow=TRUE) 
1: 1 2 0 1 
5: 2 0 1 3 
9: 4 1 3 2 
13: 
Read 12 items 
> arr2 <- array(arr1, c(3,2,2)) # Re-dimensioning can also be done with `dim<-` 
> arr2 
, , 1 

    [,1] [,2] 
[1,] 1 2 
[2,] 2 0 
[3,] 4 1 

, , 2 

    [,1] [,2] 
[1,] 0 1 
[2,] 1 3 
[3,] 3 2 

> dimnames(arr2) <- list(rows=0:2, subcat=1:2, majorcat=c("A","B")) 
> arr2 
, , majorcat = A 

    subcat 
rows 1 2 
    0 1 2 
    1 2 0 
    2 4 1 

, , majorcat = B 

    subcat 
rows 1 2 
    0 0 1 
    1 1 3 
    2 3 2 

Dopo aver impostato questa funzione, v'è un metodo di visualizzazione che offre qualcosa di simile a ciò che avete richiesto:

> ftable(arr2, row.vars=1) 
    subcat 1 2 
    majorcat A B A B 
rows     
0    1 0 2 1 
1    2 1 0 3 
2    4 3 1 2 

Sembra che avevo bisogno di specificare in modo diverso:

> ftable(arr2, row.vars=1, col.vars=3:2) 
    majorcat A B 
    subcat 1 2 1 2 
rows     
0    1 2 0 1 
1    2 0 1 3 
2    4 1 3 2 
+0

fantastico! So che non ho menzionato questo nella domanda, ma per esportare questo in un csv/excel sto cercando di indovinare ho bisogno di fare quanto segue? http://stackoverflow.com/a/28640799/2423379 – goofd

+0

Se non si incolla come previsto, Excel ha una procedura guidata di importazione a larghezza fissa molto accurata. –