2011-09-06 139 views
35

如何連接相同列但不同行數的矩陣?例如,I 想要連接(dim(a) = 15 7000)和b (dim(b) = 16 7000),我希望得到的結果是行7000列的矩陣。我可以對不同的行和列的矩陣做這個嗎?假設我想將15行7000列的矩陣與16行7500列的矩陣結合起來。我可以創建一個數據集嗎?在R中連接矩陣

回答

44

聽起來你正在尋找rbind

> a<-matrix(nrow=10,ncol=5) 
> b<-matrix(nrow=20,ncol=5) 
> dim(rbind(a,b)) 
[1] 30 5 

同樣,cbind水平堆放的矩陣。

我不完全相信你的最後一個問題是什麼意思(「我可以爲不同的行和列的矩陣做到這一點?」)

+0

假設我想要將15行7000列的矩陣與16列rwos和7500列的矩陣組合起來。目標是遍歷每一行並找到最大值。 – Dombey

+3

@GTyler對於15x7000和16x7500的組合問題沒有很好的定義。你需要編輯你的問題(不要留下評論)來指定這樣的事情:結果是什麼維度?所有多餘的行/列會發生什麼?結果矩陣的每個元素如何唯一確定? – joran

+0

@joran我不同意,我也認爲rbind或cbind是這個問題的錯誤功能!如下所述,能夠組合不同行和/或列號的數據幀或矩陣更適合於cbindX! – gawbul

6

cbindX從包裝GDATA結合的多列不同的列和行長度。點擊這裏,查看網頁:

http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gdata/html/cbindX.html

它需要多個逗號分隔的矩陣和data.frames作爲輸入:)你只需要

install.packages("gdata", dependencies=TRUE)

然後

library(gdata) 
concat_data <- cbindX(df1, df2, df3) # or cbindX(matrix1, matrix2, matrix3, matrix4) 
+2

這是迄今爲止我嘗試過的最快的解決方案。 – Datageek

+0

'cbindX'是一個很棒的函數,但OP顯然只是按行詢問綁定矩陣(注意它們指定的結果的維數),而不是列,並且** gdata **不包含類似的rbind函數。然而,** plyr **中有一個'rbind.fill'函數。 – joran

+0

此外,我的評論他們的問題沒有很好的定義是正確的。您似乎忽略了這一部分:「目標是循環遍歷每一行並找到最大值。」這完全不清楚OP的含義。如果他們只打算用NA填充丟失的單元格,那麼我只會推薦rbind.fill。 – joran