将行从一个矩阵映射到另一个矩阵。共享唯一ID

时间:2012-08-24 19:27:08

标签: r

我有三张桌子。包含结果的一个。另外两个包含有关结果中出现的唯一ID的注释。我会尝试解释一下格式。

结果

UniqueID1 UniqueID2 [包含某些实验结果的列。]

NOTES1

UniqueID [关于此特定ID的注释]

NOTES2

与上述相同。

所以,我希望结果中的每一行都包含NOTES表中的注释。我现在迭代地完成这个;这个过程现在需要比实验本身更长的时间。我考虑过使用子集或lapply,但似乎找不到合适的东西。

需要考虑的一些事项。

关于结果:结果中的两个UniqueID列是不相交的。它们不是集合;它们包含重复。但是,每对唯一ID在结果中只出现一次。表。

关于NOTES:唯一ID列不包含重复。

我上面给出的细节是为什么我不只是懒惰地对NOTES表进行子集化并在结果和NOTES的子集上调用cbind的部分原因。

我相信我已经为此做了一点点思考;请不要仅仅因为答案对你来说是微不足道的。我没有包含代码,因为我想知道如何在没有迭代的情况下为R中的一般情况完成此操作。如果您认为它会有所帮助,我可以包含一些代码。

样本表:

结果

"UniqueID_1"    "UniqueID_2"    "P_val" "Corr_Coef"
"M200000001"    "M200000113"    "0.530536974203384" "-0.115081242888051"
"M200000001"    "M200000113"    "0.530536974203384" "-0.115081242888051"
"M200000001"    "M200000114"    "0.252990706016934" "0.399292132865147"
"M200000001"    "M200000115"    "0.368094246871692" "0.16456647390621"
"M200000001"    "M200000116"    "0.78457345841227"  "-0.0502948318806314"
"M200000001"    "M200000117"    "0.874022710686625" "-0.0291832590390869"
"M200000001"    "M200000121"    "0.199903265024637" "0.232729988792225"
"M200000001"    "M200000122"    "0.892630363051574" "-0.024845579436259"
"M200000001"    "M200000126"    "0.27862153489629"  "-0.208127935743872"

注意

M200000002  22352   Vim
M200000004  20810   Srm
M200000005  17878   Myf6
M200000006  27061   Bcap31
M200000007  54204   1-Sep
M200000008  71995   Erv3
M200000009  15384   Hnrpab
M200000010  14453   Gas2
M200000011  12054   Bcl7b
M200000012  26572   Cops3
M200000014  17896   Myl4
M200000016  52469   Ccdc56
M200000017  19720   Trim27
M200000019  11434   Acr

2 个答案:

答案 0 :(得分:3)

merge(results, notes, by="UniqueID_1", all.x=TRUE)

或者,对于两个音符的情况:

merge(merge(results, notes1, by="UniqueID_1", all.x=TRUE),
      notes1, by="UniqueID_2", all.x=TRUE)

您尚未告诉我们您的NAMES列的名称,因此如果每个列中的ID列实际上是UniqueID,那么您需要执行以下操作:

merge(merge(results, notes1, by.x="UniqueID_1", by.y="UniqueID", all.x=TRUE),
      notes1, by.x="UniqueID_2", by.y="UniqueID", all.x=TRUE)

来自notes1notes2的备注将位于不同的列中。

答案 1 :(得分:0)

我仍然不清楚为什么subsetcbind不适合你;看起来这样的事情会好起来的。

 cbind(Results, Notes1[Results$UniqueID_1,], Notes2[Results$UniqueID_2,])

这将要求Notes表的rownames为ID;也许这就是问题?

 rownames(Notes1) <- Notes1$UniqueID
 rownames(Notes2) <- Notes2$UniqueID

match在这样的情况下也很有用;这是merge在幕后使用的内容。