【问题标题】:how to merge multiple data frame based on common column [duplicate]如何基于公共列合并多个数据框[重复]
【发布时间】:2016-01-05 23:22:04
【问题描述】:

我有三个数据框,我想通过通用列名(基因)合并所有三个数据集

dt1 <- read.table(header = TRUE, text = "Gene chr log
Sall3    5     -1.5
TRIM5    5     -3.4
PDIA5    2    -2.3 
Nfatc1   2     -3.5",  stringsAsFactors = FALSE)

dt2 <- read.table(header = TRUE, text = "Gene       chr log
Sall3    5     -1.5
TRIM5    5     -3.4
PDIA5    2     -2.3 
DCC      2     -0.4",stringsAsFactors = FALSE)

dt3 <- read.table(header = TRUE, text = "Gene       chr log
Sall3    5     -1.5
TRIM5    5     -3.4
Ctdp1    2     -2.3,
Nfatc1   2      -4.5", stringsAsFactors = FALSE)

预期输出

dfinal <- read.table(header = TRUE, text = "Gene       chr log
    Sall3    5     -1.5
    TRIM5    5     -3.4", stringsAsFactors = FALSE)

【问题讨论】:

  • 不要在您的全局环境中保存多个数据集。将它们全部放入一个列表(请参阅?mget)并使用欺骗中的解决方案。
  • 实际上我认为 OP 要求类似交叉点的操作,而不是 merge

标签: r


【解决方案1】:

您可以使用两次merge 函数

merge(merge(dt1, dt2, by = "Gene"), dt3, by = "Gene")[1:3]

# Gene chr.x log.x
#1 Sall3     5  -1.5
#2 TRIM5     5  -3.4

正如@Pierre 提到的,对于嵌套merge 的多个数据框不是一个好的选择。我们可以使用Reducemerge 来代替:

Reduce(merge, list(dt1,dt2,dt3))

#   Gene chr  log
#1 Sall3   5 -1.5
#2 TRIM5   5 -3.4

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多