R根据列合并2个表

时间:2014-06-19 14:48:14

标签: r merge dataframe

我在R中有两个包含3列的数据帧:

df1 <- data.frame("Gene"=c("Myc", "Rad", "Meg", "Cdc"), "Meth"=c(13, 62, 62, 79), "Exp"=c(-4.2, 1, 0.9, -2))
df2 <- data.frame("Gene"=c("Rad", "Gnas", "Meg", "Klm"), "Meth"=c(54, 13, 05, 84), "Exp"=c(-3.2, 0, 3.9, -2))

我想制作新数据帧的两个版本(或两个版本中的至少一个)。 1) 包含完整的df1,添加了两个与df2 Gene列重叠的新列,例如:

df3 <- data.frame("Gene"=c("Myc", "Rad", "Meg", "Cdc"), "Meth"=c(13, 62, 62, 79), "Exp"=c(-4.2, 1, 0.9, -2), "Meth2"=c(NA, 54, 05, NA), "Exp2"=c(NA, -3.2, 3.9, NA))

2) 仅包含df1和df2中的基因值:

df3 <- data.frame("Gene"=c("Rad", "Meg"), "Meth"=c(62, 62), "Exp"=c(1, 0.9), "Meth2"=c(54, 05), "Exp2"=c(-3.2, 3.9))

2 个答案:

答案 0 :(得分:1)

您可以使用merge(也可以查看here):

> merge(df1, df2, by="Gene", all.x=T)
  Gene Meth.x Exp.x Meth.y Exp.y
1  Cdc     79  -2.0     NA    NA
2  Meg     62   0.9      5   3.9
3  Myc     13  -4.2     NA    NA
4  Rad     62   1.0     54  -3.2

> merge(df1,df2, by = "Gene")
  Gene Meth.x Exp.x Meth.y Exp.y
1  Meg     62   0.9      5   3.9
2  Rad     62   1.0     54  -3.2

答案 1 :(得分:1)

?merge可以做到这一点。

df3 <- merge(df1,df2, by = "Gene", all.x = TRUE)

df4 <- merge(df1,df2, by = "Gene")