2015-05-17 4 views
9

sto avendo una difficoltà conversione da un oggetto di classe "tavola" ad una matrice:conversione di un oggetto di classe "tavola" alla matrice in R

Ho una variabile categorica (un fattore R) e Sto usando i suoi conti. Ho questo conta memorizzati in una tabella:

my.table = table(my.dataframef$cat.variable) 
class(my.table) 
[1] "table" 

Dopo aver usato questa tabella per fare un po 'barplots voglio fare un barplot segmentato e quindi ho bisogno di queste informazioni, sotto forma di una matrice. Questo è quello che sto facendo, ma non funzionerà (elementi non sono nell'ordine corretto):

my.matrix = matrix(my.table, nrow = n.matrix.rows, ncol = n.matrix.cols) 

Ho risolto il problema per una matrice 2x2 da mannually assegnando ciascun elemento nella posizione:

my.matrix = matrix (c(my.table[4],my.table[3],my.table[2],my.table[1]), 
     nrow=2,ncol=2) 

mi chiedevo se esiste un "modo automatico" per fare questo come con matrice più grande diventa un esercizio difficile ...

Grazie per il vostro aiuto, lo apprezzo molto!

+2

è possibile fornire un' dput' della matrice? –

+0

Grazie David, questo è un dput: 'struttura (c (686L, 337L, 686L, 466L), .Dim = c (2L, 2L), .Dimnames = lista ( c (" male (mnt) "," female (mnt) "), c (" male (auth) "," female (auth) " ))) –

+0

Inoltre, ho realizzato che gli indici sono in ordine decrescente. Ho provato a scrivere: 'my.matrix = matrix (rev (my.table), nrow = 2, ncol = 2)' e funziona bene ... –

risposta

3

È possibile utilizzare questo metodo per modificare l'attributo di classe a " matrice ":

# input table 
tbl <- structure(c(466L, 686L, 337L, 686L), 
     .Dim = 4L, 
     .Dimnames = structure(list(c("f-f", "f-m", "m-f", "m-m")), 
     .Names = ""), class = "table") 


attributes(tbl)$class <- "matrix" 
#alternative syntax: attr(tbl, "class") <- "matrix" 
tbl 
#f-f f-m m-f m-m 
#466 686 337 686 
#attr(,"class") 
#[1] "matrix" 
3

Beh, questo non è difficile se si sa che un tavolo è un array con la classe più "tabella" allegato: Hai appena unclass():

> tab <- structure(c(686L, 337L, 686L, 466L), .Dim = c(2L, 2L), 
      .Dimnames = list(c("male(mnt)", "female(mnt)"), 
           c("male(auth)", "female(auth)"))) 
> tab 
      male(auth) female(auth) 
male(mnt)   686   686 
female(mnt)  337   466 
> (mat <- unclass(tab)) 
      male(auth) female(auth) 
male(mnt)   686   686 
female(mnt)  337   466 
> class(mat) 
[1] "matrix" 
>