2013-04-16 11 views
19

mam matryca jak:Jak ustawić unikalne nazwy wierszy i kolumn macierzy, gdy jej wymiar jest nieznany?

 [,1][,2][,3][,4] 
[1,] 12 32 43 55 
[2,] 54 54 7 8 
[3,] 2 56 76 88 
[4,] 58 99 93 34 

nie wiem z góry, ile wierszy i kolumn będę mieć w matrycy. Dlatego muszę dynamicznie tworzyć nazwy wierszy i kolumn.

mogę wymienić kolumny (wiersza) bezpośrednio jak:

colnames(rmatrix) <- c("a", "b", "c", "d") 

Jednak, jak mogę tworzyć moje imiona wektor dynamicznie dopasowując go do wymiarów matrycy?

nm <- ("a", "b", "c", "d") 
colnames(rmatrix) <- nm 

Odpowiedz

8

Aby dynamicznie nazwy kolumn (lub wierszy) można spróbować

colnames(rmatrix) <- letters[1:ncol(rmatrix)] 

gdzie letters może być zastąpiony przez wektor nazw kolumn chcesz. Możesz zrobić coś podobnego w przypadku wierszy.  

+0

gdzie '' letters' jest jak litery <-c ("col1", "col2", "Col3") ' – loretoparisi

22

Można użyć rownames i colnames i ustawianie do.NULL=FALSE aby utworzyć nazwy dynamicznie, jak w:

set.seed(1) 
rmatrix <- matrix(sample(0:100, 16), ncol=4) 

dimnames(rmatrix) <- list(rownames(rmatrix, do.NULL = FALSE, prefix = "row"), 
          colnames(rmatrix, do.NULL = FALSE, prefix = "col")) 

rmatrix 
    col1 col2 col3 col4 
row1 26 19 58 61 
row2 37 86 5 33 
row3 56 97 18 66 
row4 89 62 15 42 

można zmienić prefix nazwać wiersze/cols, jak chcesz.

+0

gdybym nie don chce wspólny przedrostek wtedy? Mam na myśli col1 powinno UNIT, col2 powinno być RATE, col3 powinno być PRICE. –

+0

@KuldeepSingh, możesz po prostu użyć 'colnames' w ten sposób' colnames (your.matrix.here) <- c ("UNIT", "RATE", "PRICE") ', spójrz na [' colnames'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/colnames.html), istnieje również 'rownames' dla nazewnictwa wierszy. –

+1

Dzięki Jilber, zadziałało. :) –

2

Możesz użyć provideDimnames. Kilka przykładów z różnym stopniem personalizacji:

m <- matrix(1:12, ncol = 3) 

provideDimnames(m) 
# A B C 
# A 1 5 9 
# B 2 6 10 
# C 3 7 11 
# D 4 8 12 

provideDimnames(m, base = list(letters, LETTERS)) 
# A B C 
# a 1 5 9 
# b 2 6 10 
# c 3 7 11 
# d 4 8 12 

provideDimnames(m, base = list(paste0("row_", letters), paste0("col_", letters))) 
#  col_a col_b col_c 
# row_a  1  5  9 
# row_b  2  6 10 
# row_c  3  7 11 
# row_d  4  8 12 
Powiązane problemy