R:按列名组合矩阵

Stu*_*nce 0 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
    }

}
Run Code Online (Sandbox Code Playgroud)

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

我使用的C =交叉(A,B)也不起作用; 它给了我不是我想要的任何建议?

谢谢

Mat*_*erg 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
Run Code Online (Sandbox Code Playgroud)

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

a[,n]
##      A  C
## [1,] 1 11
## [2,] 2 12
## [3,] 3 13
## [4,] 4 14
## [5,] 5 15
Run Code Online (Sandbox Code Playgroud)