2012-07-21 14 views
6

Ho la seguente struttura dati:R salvare l'uscita del tavolo() in un frame di dati

id<-c(1,2,3,4,1,1,2,3,4,4,2,2) 
period<-c("first","calib","valid","valid","calib","first","valid","valid","calib","first","calib","valid") 
df<-data.frame(id,period) 

digitando

table(df) 

risultati in

period 
id calib first valid 
1  1  2  0 
2  2  0  2 
3  0  0  2 
4  1  1  1 

se risparmio come cornice dati 'df'

df<-data.frame(table(df)) 

il formato del 'df' sarebbe come

id period Freq 
1 1 calib 2 
2 2 calib 1 
3 3 calib 1 
4 4 calib 0 
5 1 first 1 
6 2 first 2 
7 3 first 0 
8 4 first 0 
9 1 valid 0 
10 2 valid 0 
11 3 valid 2 
12 4 valid 3 

come posso evitare questo e come posso salvare la prima uscita in quanto è in una cornice di dati?

ancora più importante c'è un modo per ottenere lo stesso risultato utilizzando "dcast"?

risposta

14

Questo aiuto?

> data.frame(unclass(table(df))) 
    calib first valid 
1  1  2  0 
2  2  0  2 
3  0  0  2 
4  1  1  1 
+0

Funziona bene! grazie – AliCivil

+1

ora un'altra domanda: cosa succede se voglio che la colonna id sia inclusa nel frame dei dati risultante? – AliCivil

1

Per elaborare solo un po '. Ho modificato gli ID nell'esempio data.frame in modo tale che i tuoi id non siano 1: 4, al fine di dimostrare che gli ID sono riportati nella tabella e non sono una sequenza di conteggi di riga.

id <- c(10,20,30,40,10,10,20,30,40,40,20,20)  
period <- c("first","calib","valid","valid","calib","first","valid","valid","calib","first","calib","valid") 
df <- data.frame(id,period) 

Creare il nuovo data.frame in due modi. La risposta rengis va bene per i frame di dati a 2 colonne che hanno per primi la colonna id. Non funzionerà molto bene se il tuo frame di dati ha più di 2 colonne o se le colonne sono in un ordine diverso.

alternativa sarebbe quella di specificare le colonne e l'ordine delle colonne per la vostra tavola:

df3 <- data.frame(unclass(table(df$id, df$period))) 

la colonna id è incluso nella nuova data.frame come row.names(df3). Per aggiungerlo come nuova colonna:

df3$id <- row.names(df3) 
df3 
    calib first valid id 
10  1  2  0 10 
20  2  0  2 20 
30  0  0  2 30 
40  1  1  1 40 
Problemi correlati