矩阵匹配

时间:2018-07-18 16:06:36

标签: r matching

我有两个矩阵ggplot()t1

t2

有没有一种方法可以获取根据表> t1 aaa bbb ccc ddd [1,] 1 2 3 4 > t2 e1 e2 e3 e4 e5 e6 e7 e8 e9 [1,] "aaa" "ddd" "aaa" "bbb" "ccc" "bbb" "ddd" "aaa" "ccc" 来替换t2的数据而没有循环的矩阵?最后,我想提供的矩阵是:

t1

我尝试了> t3 e1 e2 e3 e4 e5 e6 e7 e8 e9 [1,] 1 4 1 2 3 2 4 1 3 匹配,但是由于两个矩阵的长度不一样,因此无法正常工作。

2 个答案:

答案 0 :(得分:1)

使用匹配项

t(setNames(t1[1,][t2[1,]], colnames(t2)))
#     e1 e2 e3 e4 e5 e6 e7 e8 e9
#[1,]  1  4  1  2  3  2  4  1  3

针对多行“ t2”(基于@ r2evans帖子中的示例)

out <- `dim<-`(t1[1,][t2], dim(t2))
colnames(out) <- colnames(t2)
out
#     e1 e2 e3 e4 e5 e6 e7 e8 e9
#[1,]  1  4  1  2  3  2  4  1  3
#[2,]  1  4  1  2  3  2  4  1  3

数据

t1 <- t(setNames(1:4, strrep(letters[1:4], 3)))
t2 <- t(setNames(strrep(c('a', 'd', 'a', 'b', 'c', 'b', 'd', 'a', 'c'), 
            3), paste0("e", 1:9)))

答案 1 :(得分:1)

对于笑容,我在t2中添加了第二行:

t1 <- as.matrix(read.table(header=TRUE, row.names=1, text='
     aaa bbb ccc ddd
[1,]   1   2   3   4'))
t2 <- as.matrix(read.table(header=TRUE, row.names=1, stringsAsFactors=FALSE, text='
     e1    e2    e3    e4    e5    e6    e7    e8    e9   
[1,] "aaa" "ddd" "aaa" "bbb" "ccc" "bbb" "ddd" "aaa" "ccc"
[2,] "ddd" "ddd" "aaa" "bbb" "ccc" "bbb" "ddd" "aaa" "ccc"'))

array(t1[1,][t2], dim=dim(t2), dimnames=dimnames(t2))
#      e1 e2 e3 e4 e5 e6 e7 e8 e9
# [1,]  1  4  1  2  3  2  4  1  3
# [2,]  4  4  1  2  3  2  4  1  3

(我尝试过t2[] <- t1[1,][t2],但是由于t2最初是一个character矩阵,因此将转换索引:

t2a <- t2
t2a[] <- t1[1,][t2]
t2a
#      e1  e2  e3  e4  e5  e6  e7  e8  e9 
# [1,] "1" "4" "1" "2" "3" "2" "4" "1" "3"
# [2,] "4" "4" "1" "2" "3" "2" "4" "1" "3"