2012-07-21 2 views
6

je la trame de données suivantes:R sauver la sortie de la table() dans une trame de données

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) 

frappe

table(df) 

résultats dans

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

si je sauve comme trame de données 'df'

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

le format de « df » serait comme

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 

comment puis-je éviter cela et comment puis-je enregistrer la première sortie comme il est dans une trame de données?

Plus important encore est-il possible d'obtenir le même résultat en utilisant 'dcast'?

Répondre

14

Cela aiderait-il?

> 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

Cela fonctionne bien! merci – AliCivil

+1

maintenant une autre question: et si je veux que la colonne d'id soit incluse dans la trame de données résultante? – AliCivil

1

Pour développer un peu. J'ai changé les identifiants dans l'exemple data.frame de sorte que vos identifiants ne soient pas 1: 4, afin de prouver que les identifiants sont transportés dans la table et ne sont pas une séquence de nombre de lignes.

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) 

Créez le nouveau data.frame de deux façons. rengis La réponse est correcte pour les trames de données à deux colonnes qui ont d'abord la colonne id. Cela ne fonctionnera pas aussi bien si votre trame de données a plus de 2 colonnes, ou si les colonnes sont dans un ordre différent.

alternative serait de spécifier les colonnes et l'ordre des colonnes de votre table:

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

la colonne id est inclus dans le nouveau data.frame comme row.names(df3). Pour l'ajouter en tant que nouvelle colonne:

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 
Questions connexes