矩阵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)也不起作用;它没有给我我想要的东西 有什么建议吗?
谢谢
答案 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