2014-01-12 126 views
0

矩陣A是隻具有N行和c列 矩陣B是隻具有N行的簡單矩陣和d欄R:組合矩陣按列名稱

簡單矩陣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)很明顯,如果該位置是不同的,因此需要 「如果(colnames(A)[i]是在colnames(B))」 和B) B中不在A中的元素被忽略;總的來說這是一個糟糕的做法。

我用C =相交(A,B),也沒有工作;它給了我不是我想要的 有什麼建議?

謝謝

+2

你在找'merge'嗎?或'cbind'?你能給出一個可重複的例子嗎? –

+0

您是否想要將A中具有相同名稱但可能不同內容的列作爲B中的列?無論如何,試試這個'colnames(A)%%colnames(B)' –

回答

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 
+0

這似乎是一個很好的猜測OP的想法。 –

+0

這很好,你交叉名稱並將其用作列的列表,coocoocool :) thx – StudentOfScience