如何在R中进行矩阵的基本行名映射?

时间:2014-06-05 16:16:37

标签: r

我有一个名为A的非常大的矩阵,我需要在该矩阵中添加一列,这是来自其他矩阵的该矩阵的映射行名称B。 矩阵A的行名称在ID列中,其映射名称在列Sample

这里是简单的可重现的例子和预期的输出。

A<-cbind(c("a","b", "c"), c(1,2,3), c(10,14,15))
rownames(A)<-c("q","w","r")   

> A
  [,1] [,2] [,3]
q "a"  "1"  "10"
w "b"  "2"  "14"
r "c"  "3"  "15"

和第二个矩阵,矩阵A的行名称在ID列中,并且它的映射名称在Sample列中:

B<-cbind(c("d1","f2","g5","y4"),c("q","L","w","r"),c("qw","we","zr","ls"))  

colnames(B)<-c("M","ID","Sample"
> B
     M    ID  Sample
[1,] "d1" "q" "qw"  
[2,] "f2" "L" "we"  
[3,] "g5" "w" "zr"  
[4,] "y4" "r" "ls"  
> 

这是预期的输出:

A<-cbind(c("a","b", "c"), c(1,2,3), c(10,14,15), c("qw","zr","ls"))
rownames(A)<-c("q","w","r")    
> A
  [,1] [,2] [,3] [,4]
q "a"  "1"  "10" "qw"
w "b"  "2"  "14" "zr"
r "c"  "3"  "15" "ls"
> 

有人会帮我在R中实现吗?

2 个答案:

答案 0 :(得分:2)

您还可以使用R中的合并功能。

> A <-matrix( data = NA, nrow = 3, ncol =3)
> A[1,] <- c("a" , "1",  "10")
> A[2,] <- c( "b" , "2" , "14")
> A[3,] <- c("c" , "3" , "15")
> 
> row.names(A) = c("q","w","r")
> 
> 
> B <- matrix(data = "NA" , nrow = 4, ncol = 3)
> B[1,] <- c("d1" ,"q" ,"qw")
> B[2,] <- c( "f2" ,"L" ,"we")
> B[3,] <- c("g5" ,"w", "zr")
> B[4,] <- c("y4", "r", "ls" )
> colnames(B) = c("M", "ID",  "Sample")
> A
  [,1] [,2] [,3]
q "a"  "1"  "10"
w "b"  "2"  "14"
r "c"  "3"  "15"
> B
     M    ID  Sample
[1,] "d1" "q" "qw"  
[2,] "f2" "L" "we"  
[3,] "g5" "w" "zr"  
[4,] "y4" "r" "ls"  
> 
> C <- merge(A, B, by.x = 0, by.y = "ID" )
> D <- C[,-5]
> D
  Row.names V1 V2 V3 Sample
1         q  a  1 10     qw
2         r  c  3 15     ls
3         w  b  2 14     zr

答案 1 :(得分:1)

你几乎只是将样本矩阵放在一起。

虽然我们无法在矩阵上使用$运算符,但我们可以使用dimnames(以及行/列号)来对矩阵进行子集化。然后,我们可以使用ID

找到A的行名称中的%in%> cbind(A, B[,"Sample"][B[,"ID"] %in% rownames(A)]) # [,1] [,2] [,3] [,4] # q "a" "1" "10" "qw" # w "b" "2" "14" "zr" # r "c" "3" "15" "ls"
{{1}}