R - Create a ordered list from a matrix

丶灬走出姿态 提交于 2020-01-16 18:39:33

问题


Hi there!

I have this 24x24 matrix with a lot of numbers from 1-24. Where I want to turn every cell with the value of X (eg. 3) into the row.name of the X'th row (eg. name3)

What I have

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

What I want to do now, is turn all these numbers into a character string equvivalent to the i'th row name so a 1 should be converted to name1 and so forth.

What I need

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

I figured it may be nessesary to convert the matrix into a dataframe, but I don't know exacly how to get there from what I have.

Thanks! //HK


回答1:


Use basic [ to match the values to the rownames.

Here's an example.

Assume we're starting with this:

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

Here's what rownames(m)[m] looks like:

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

Use [] to preserve the dims of the original matrix while replacing the values:

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


来源:https://stackoverflow.com/questions/26194626/r-create-a-ordered-list-from-a-matrix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!