2013-04-16 36 views
19

Tôi có ma trận như:Cách đặt tên hàng và cột duy nhất của ma trận khi thứ nguyên của nó không xác định?

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

Tôi không biết trước có bao nhiêu hàng và cột tôi sẽ có trong ma trận. Vì vậy, tôi cần phải tạo tên hàng và cột động.

tôi có thể đặt tên cho các cột (hàng) trực tiếp như:

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

Tuy nhiên, làm thế nào tôi có thể tạo ra vector tên của tôi năng động để phù hợp với kích thước của ma trận?

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

Trả lời

8

Để động cột tên (hoặc hàng), bạn có thể thử

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

nơi letters có thể được thay thế bằng một vector của các tên cột của sự lựa chọn của bạn. Bạn có thể làm điều tương tự cho các hàng.  

+0

nơi 'letters' giống như' letters <-c ("col1", "col2", "col3") ' – loretoparisi

22

Bạn có thể sử dụng rownamescolnames và thiết do.NULL=FALSE nhằm tạo tên động, như trong:

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 

bạn có thể thay đổi prefix để đặt tên cho hàng/cols như bạn muốn.

+0

nếu tôi không muốn có tiền tố chung? Ý tôi là col1 nên UNIT, col2 nên là RATE, col3 nên là PRICE. –

+0

@KuldeepSingh, bạn chỉ có thể sử dụng 'colnames' theo cách này' colnames (your.matrix.here) <- c ("UNIT", "RATE", "PRICE") ', hãy xem ['? Colnames'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/colnames.html), cũng có 'rownames' để đặt tên hàng. –

+1

Cảm ơn Jilber, Nó đã hoạt động. :) –

2

Bạn có thể sử dụng provideDimnames. Một số ví dụ với mức độ tuỳ chỉnh khác nhau:

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 
Các vấn đề liên quan