我確信這個答案已經到位,但我不認爲我一直在使用正確的搜索條件。根據行和列名稱添加矩陣
這是我的問題。我有多個矩陣(我將在這裏簡化爲兩個),其中每行是一個唯一標記的個體(其中一些在矩陣之間共享,其中一些不是)以及共享的共同列標題。
例如:
first<-matrix(rbinom(20,1,.5),4,5)
first[,1]=c(122,145,186,199)
colnames(first)<-c("ID",901,902,903,904)
first
ID 901 902 903 904
[1,] 122 1 0 0 0
[2,] 145 0 0 0 1
[3,] 186 0 0 1 1
[4,] 199 1 0 0 0
second<-matrix(rbinom(30,1,.5),6,5)
second[,1]=c(122,133,142,151,186,199)
colnames(second)<-c("ID",901,902,903,904)
second
ID 901 902 903 904
[1,] 122 0 1 1 1
[2,] 133 0 0 0 1
[3,] 142 1 1 0 1
[4,] 151 0 1 0 0
[5,] 186 1 0 1 1
[6,] 199 1 0 0 0
我想補充「第一」和「第二」一起基於「ID」和列名。這應該導致一個有7行的矩陣(因爲'第一'矩陣中有4個ID,'第二'矩陣中有3個新ID和3箇舊ID:「122,133,142,145,151,186,199」)和相同的列數。
在這個例子中,結果我想應該是:
ID 901 902 903 904
[1,] 122 1 1 1 1
[2,] 133 0 0 0 1
[3,] 142 1 1 0 1
[4,] 145 0 0 0 1
[5,] 151 0 1 0 0
[6,] 186 1 0 2 2
[7,] 199 2 0 0 0
'expand.grid'的工作原理與魔術類似。 – Ryogi 2012-07-20 23:16:00
我不知道爲什麼,但是當我在我的真實數據集上使用rbind時(我使用ID作爲rownames),重複的rownames在它們的末尾附加了一個數字。例如,如果ID#165320128出現3次,一行將是'165320128',下一個'1653201281'和最後一個'1653201282' – user1399311 2012-07-22 18:01:55
@ user1399311,它可能是您的原始數據存儲在數據幀而不是矩陣?看起來它們表現出您描述的行爲,因爲data.frame不允許重複的行名稱。你可以將它們轉換成矩陣,但我會編輯我的答案以提供更好的解決方案。 – MvG 2012-07-22 18:24:51