2010-02-19 10 views
5

Disons que je l'ai créé la matrice suivante:Changement dimnames des matrices et des trames de données dans R

> x <- matrix(1:20000,nrow=100) 
> x[1:10,1:10] 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 101 201 301 401 501 601 701 801 901 
[2,] 2 102 202 302 402 502 602 702 802 902 
[3,] 3 103 203 303 403 503 603 703 803 903 
[4,] 4 104 204 304 404 504 604 704 804 904 
[5,] 5 105 205 305 405 505 605 705 805 905 
[6,] 6 106 206 306 406 506 606 706 806 906 
[7,] 7 107 207 307 407 507 607 707 807 907 
[8,] 8 108 208 308 408 508 608 708 808 908 
[9,] 9 109 209 309 409 509 609 709 809 909 
[10,] 10 110 210 310 410 510 610 710 810 910 

Quelles sont les méthodes R pour changer les noms de lignes et de colonnes? Par exemple, j'aime que les noms de lignes soient SS1, SS2, ..., SS100 et que les noms de colonnes soient M1, M2, ..., M200. Je travaille habituellement avec des données avec 1000s de lignes et de colonnes, et j'ai besoin d'une bonne méthode pour le faire. Certaines personnes utilisent quelque chose comme attributes(x)$dimnames <- list(...) et d'autres utilisent rownames <- paste(...). Quelles sont toutes les méthodes possibles?

Ma deuxième question est, puis-je utiliser les mêmes méthodes après avoir converti la matrice en une trame de données?

Répondre

11

De commentaire à répondre: Comme l'a écrit @doug, cela fonctionne pour les matrices et les trames de données.

6

Oui mêmes méthodes fonctionneront (matrice/data.frame) - voir ci-dessous:

A = matrix(1:12, nrow=4) 
colnames(A) = c("col1", "col2", "col3") 
row.names(A) = c("row1", "row2", "row3", "row4") 

dfA = as.data.frame(A) 
row.names(dfA) = c("r1", "r2", "r3", "r4") 
colnames(A) = c("C1", "C2", "C3") 

Et pour gagner du temps, vous pouvez le faire:

x = rep("col", dim(M)[2]) 
y = 1:dim(M)[2] 
colnames(M) = paste(x, y, sep="") 
+0

OK mais j'ai 1000s de lignes et de colonnes. Je ne peux pas taper r1, r2, ... r1253, ... etc. Il devrait y avoir des opérations automatiques de contre-collage. –

+2

'row.names (A) <- paste (" SS ", 1: nrow (A), sep =" "); colnames (A) <- paste (" M ", 1: ncol (A), sep = "") ' – Marek

+0

@Marek: Pourriez-vous s'il vous plaît ajouter ceci comme réponse? –