2015-06-19 4 views
7

В python, а точнее в pandas, я могу работать с MultIndex по строкам или столбцам. Есть ли эквивалент в R? Я проверял несколько учебников, например, в https://en.wikibooks.org/wiki/R_Programming/Working_with_data_frames, но я не смог найти подходящий эквивалент R.R: мультииндекс по столбцам и/или строкам

В качестве примера я имею следующий кадр данных:

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

Я хочу, чтобы это выглядело как:

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

Другие соответствующие ответы, которые я нашел из 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

Сила «MultiIndex» является одной из причин, по которой python/pandas иногда предпочтительнее R для обработки данных. 'R' не поддерживает один и тот же тип иерархической индексации. – tegancp

+0

@ user227710 Это выглядит многообещающим. этот пакет 'tables' также позволяет вам делать мультииндекс по строкам? – goofd

ответ

6

Учитывая, что вы искали «работу вокруг», я дам вам, по общему признанию, ограниченный. Массивы в R может содержать только один режим (который противоречит пониманию большинства людей может включать в себя списки)

> 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 

После настройки этой, существует способ отображения, который обеспечивает что-то вроде того, что вы просили:

> 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 

Похоже, мне нужно задать его по-разному:

> 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

отлично! Я знаю, что не упоминал об этом в вопросе, но для того, чтобы экспортировать это в csv/excel, я думаю, что мне нужно сделать следующее: http://stackoverflow.com/a/28640799/2423379 – goofd

+0

Если он не вставляется, как вы ожидаете, Excel имеет очень аккуратный мастер импорта фиксированной ширины. –