2014-10-04 65 views
0

嗨!R - 从矩阵创建一个有序列表

我有这个24x24矩阵与从1-24很多数字。当我想每一个细胞又与X(例如3)的值到第X行的row.name(如NAME3)

我有什么

row.names   V1 V2 V3 
name1    1  3 10 
name2    3 20 1 
name3    5 13 2 
...    .. .. .. 
name24   19  3 4 

什么我现在要做的是将所有这些数字转换成与第i行名称相等的字符串,因此1应该转换为name1等等。

我需要

row.names    V1  V2  V3 
name1    name1  name3 name10 
name2    name3 name20 name1 
name3    name5 name13 name2 
...     ..  ..  .. 
name24    name19 name3 name4 

我想这可能是对所必要的矩阵转换成数据帧是什么,但我不exacly知道如何从我有什么那里。

谢谢! // HK

+0

也许我还不够清楚。我需要用accordin行的row.name更新单元格calue。 说如果第3行的row.name是“比利鲍勃”,我需要所有3的更新为“比利鲍勃” – user4098307 2014-10-04 16:17:23

回答

3

使用基本[将值与rownames相匹配。

下面是一个例子。

假设我们已经开始与此:

set.seed(1) 
m <- matrix(sample(1:3, 12, TRUE), 
      ncol = 4, 
      dimnames = list(letters[1:3], LETTERS[1:4])) 
m 
# A B C D 
# a 1 3 3 1 
# b 2 1 2 1 
# c 2 3 2 1 

这里是rownames(m)[m]样子:

rownames(m)[m] 
# [1] "a" "b" "b" "c" "a" "c" "c" "b" "b" "a" "a" "a" 

使用[]保留原始矩阵的变暗,同时替换值:

m[] <- rownames(m)[m] 
m 
# A B C D 
# a "a" "c" "c" "a" 
# b "b" "a" "b" "a" 
# c "b" "c" "b" "a" 
+0

Exacly我所需要的。感谢您的干净答案! – user4098307 2014-10-05 14:23:30