我有两个矩阵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
匹配,但是由于两个矩阵的长度不一样,因此无法正常工作。
答案 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"
)