2010-01-24 5 views
3

J'ai données image qui ressemble à latable Convertir en matrice par les noms de colonnes

 models cores  time 
1  4  1 0.000365 
2  4  2 0.000259 
3  4  3 0.000239 
4  4  4 0.000220 
5  8  1 0.000259 
6  8  2 0.000249 
7  8  3 0.000251 
8  8  4 0.000258 

... etc

Je voudrais suivant le convertir en une table/matrice aveC#models pour les lignes étiquettes, les # points pour les étiquettes des colonnes et le temps que les entrées de données

1 2 3 4 5 6 7 8  
1 time data 
4 time data 

actuellement je suis en utilisant des boucles pour le convertir en cette structure, bien que je me demande s'il y avait une meilleure méthode?

+0

http://stackoverflow.com/a/9617424/210673 contient une liste des différentes manières de procéder. – Aaron

Répondre

8

méthode de vérification fonte du paquet Reshape

# generate test data  
x <- read.table(textConnection(' 
models cores time 
4 1 0.000365 
4 2 0.000259 
4 3 0.000239 
4 4 0.000220 
8 1 0.000259 
8 2 0.000249 
8 3 0.000251 
8 4 0.000258' 
), header=TRUE) 


library(reshape) 
cast(x, models ~ cores) 

résultats:

models  1  2  3  4 
1  4 0.000365 0.000259 0.000239 0.000220 
2  8 0.000259 0.000249 0.000251 0.000258 
+1

Il semble que je n'ai pas le remodelage du paquet, mais j'ai trouvé que cela fonctionne aussi bien: tapply (f [, 3], f [, 1: 2], c) – Mark

4

Voici une version en utilisant la fonction de base reshape:

y <- reshape(x, direction="wide", v.names="time", timevar="cores", 
      idvar="models") 

avec la sortie

models time.1 time.2 time.3 time.4 
1  4 0.000365 0.000259 0.000239 0.000220 
5  8 0.000259 0.000249 0.000251 0.000258 

Avec le travail acharné de Remodeler fait, vous pouvez extraire la partie que vous voulez:

res <- data.matrix(subset(y, select=-models)) 
rownames(res) <- y$models 
colnames(res) <- substr(colnames(res),6,7) 

Et vous obtenez la matrice:

  1  2  3  4 
4 0.000365 0.000259 0.000239 0.000220 
8 0.000259 0.000249 0.000251 0.000258 
3

Vous n'avez pas besoin le paquet Reshape , il y a une fonction intégrée reshape qui peut le faire.

> reshape(x,idvar="models",timevar="cores",direction="wide") 
    models time.1 time.2 time.3 time.4 
1  4 0.000365 0.000259 0.000239 0.000220 
5  8 0.000259 0.000249 0.000251 0.000258 
Questions connexes