2010-02-19 14 views
5

Powiedzmy, że stworzyliśmy następującą macierz:Zmiana dimnames matryc i ramki danych w 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 

Jakie są metody badań w celu zmiany nazwy wierszy i kolumn? Na przykład lubię nazwy wierszy jako SS1, SS2, ..., SS100, a nazwy kolumn mają być M1, M2, ..., M200. Zwykle pracuję z danymi z 1000s wierszy i kolumn, i potrzebuję dobrej metody, aby to zrobić. Niektórzy używają czegoś takiego jak attributes(x)$dimnames <- list(...), a niektórzy używają rownames <- paste(...). Jakie są wszystkie możliwe metody?

Moje drugie pytanie brzmi: czy mogę użyć tych samych metod po przekonwertowaniu macierzy na ramkę danych?

Odpowiedz

11

Od komentarzu do odpowiedzi:

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

Jak @doug napisał, że pracuje dla matryc i ramek danych.

6

Tak same metody zadziała (matryca/data.frame) - patrz poniżej:

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

I zaoszczędzić czas, można to zrobić:

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

OK, ale mam 1000s wierszy i kolumn. Po prostu nie mogę wpisać r1, r2, ... r1253, ... itd. Powinien być jakiś automatyczny licznik i operacje wklejania. –

+2

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

+0

@Marek: Czy mógłbyś dodać to jako odpowiedź? –

Powiązane problemy