以一对多关系合并两个数据集

时间:2014-08-26 12:55:14

标签: r

表1(900行)标识每个群集的监管机构:

reg cluster weight
a   0   59
b   0   52
e   1   46
f   1   46
g   2   66
h   2   18

表2(90行)表示属于每个群集的基因:

gene cluster 
1   0
2   1
3   0
4   2
5   0
6   0
7   1

我想从这两个中创建一个表3,如下所示:

reg gene weight
a   1   59
a   3   59
a   5   59
a   6   59
b   1   52
b   3   52
b   5   52
b   6   52
e   2   46
e   7   46
…

即,我想列出regs和基因之间的每一次互动。我怎么能在R?中做到这一点?

1 个答案:

答案 0 :(得分:1)

merge适用于此类内容:

merge(reg, gene)

可生产

   cluster reg weight gene
1        0   a     59    1
2        0   a     59    3
3        0   a     59    5
4        0   a     59    6
5        0   b     52    1
6        0   b     52    3
7        0   b     52    5
8        0   b     52    6
9        1   e     46    2
10       1   e     46    7
11       1   f     46    2
12       1   f     46    7
13       2   g     66    4
14       2   h     18    4

合并会自动加入公共列名称(在这种情况下为cluster),但您可以根据需要进行更改。如果您不想使用cluster,也可以轻松删除merge(reg, gene)[-1]列。

如果你有大型数据集,

data.table是一个更快的选择:

library(data.table)
data.table(reg, key="cluster")[
  data.table(gene, key="cluster"),
  allow.cartesian=TRUE
]

通过指定要加入的键列来加入此处。