我确信这个答案已经到位,但我不认为我一直在使用正确的搜索条件。根据行和列名称添加矩阵
这是我的问题。我有多个矩阵(我将在这里简化为两个),其中每行是一个唯一标记的个体(其中一些在矩阵之间共享,其中一些不是)以及共享的共同列标题。
例如:
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