R:按列名组合矩阵

时间:2014-01-12 02:04:16

标签: r matrix

矩阵A只是一个包含n行和c列的简单矩阵 矩阵B只是一个简单的矩阵,有n行和d列

因此,A和B具有相同的行n,但具有不同的列数 但是,有些列是相同的(列的名称和该列中的值)

我需要创建一个矩阵C,使得C只有A和B的相同列。

A和B有colnames()所以我就是这样做但我相信有更快的方法:

for (i in 1:ncol(A)){
    if(colnames(A)[i] == colnames(B)[i]){
        #do magic
    }

}

但这失败2个地方,A)显然如果位置不同,那么需要“if(colnames(A)[i]在colnames(B)中)”和B)B中不在A中的元素被忽略;总的来说这是一个糟糕的方法。

我使用的C =交叉(A,B)也不起作用;它没有给我我想要的东西 有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:6)

您需要在名称上调用intersect,并将结果用于索引:

a <- matrix(1:15, 5)
b <- matrix(21:35, 5)
colnames(a) <- c('A', 'B', 'C')
colnames(b) <- c('A', 'C', 'D')

n <- intersect(colnames(a), colnames(b))
cbind(a[,n],b[,n])
##      A  C  A  C
## [1,] 1 11 21 26
## [2,] 2 12 22 27
## [3,] 3 13 23 28
## [4,] 4 14 24 29
## [5,] 5 15 25 30

我看到现在的问题是,当名称一致时,列值是相同的。因此,仅需要使用名称的交集来索引其中一个矩阵。要么:

a[,n]
##      A  C
## [1,] 1 11
## [2,] 2 12
## [3,] 3 13
## [4,] 4 14
## [5,] 5 15