2010-02-19 26 views
5

Diciamo che io ho creato il seguente matrice:Cambiare dimnames di matrici e frame di dati in 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 

Quali sono i metodi in R per cambiare i nomi di riga e di colonna? Ad esempio, mi piace che i nomi delle righe siano SS1, SS2, ..., SS100 e che i nomi delle colonne siano M1, M2, ..., M200. Di solito lavoro con dati con migliaia di righe e colonne e ho bisogno di un buon metodo per farlo. Alcune persone usano qualcosa come attributes(x)$dimnames <- list(...) e alcuni usano rownames <- paste(...). Quali sono tutti i metodi possibili?

La mia seconda domanda è: posso usare gli stessi metodi dopo aver convertito la matrice in un frame di dati?

risposta

11

Dal commento di rispondere:

row.names(x) <- paste("SS", 1:nrow(x), sep="") 
colnames(x) <- paste("M" , 1:ncol(x), sep="") 

Come ha scritto @doug, funziona per matrici e frame di dati.

6

Sì stessi metodi funzionano (matrice/data.frame) - vedi sotto:

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") 

E per risparmiare tempo, si può fare questo:

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

OK, ma ho 1000 di righe e colonne. Non riesco a digitare r1, r2, ... r1253, ... ecc. Dovrebbero esserci alcune operazioni di contatore e incolla automatico. –

+2

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

+0

@Marek: Potresti aggiungere questo come risposta? –