【问题标题】:How to merge data sets of unequal size [duplicate]如何合并大小不等的数据集[重复]
【发布时间】:2018-07-06 12:17:35
【问题描述】:

我有 4 个大小不同的数据集。我想合并到同一列中的一些重叠数据的数据集,但每个数据集也有一些我要保留的唯一数据。也许举个例子会更有意义。

Glucose Fructose Ox_Phos 
CACNA1I PIK3CA FYN
PLCB2 FGFR1 ITGA2B
CACNG1 PIK3R1 PIK3CA
CACNA2D2 PIK3C2G PIK3R1
MAP3K11 PIK3R5 PIK3R5

TCA Ox_Phos Sucrose ATP 
GYG1 FYN MAP3k11 CACNA1I
NA ITGA2B CACNA2D2 ITGA2B
NA FGFR1 PIK3R5 NA
NA NA CACNG1 NA

Fructose Galactose 
PIK3CA CACNG1
FGFR1 NA
PIK3R1 NA
PIK3C2G NA
PIK3R5 NA

ADP 
PIK3CA
CACNG1
PIK3C2G
NA
NA

所以正如我之前所说,我正在尝试将这 4 个数据集合并为一组数据。我想合并具有相似列名的列,但也让唯一列成为一个新列。如果这有意义吗?这是我希望数据的样子。

Glucose Fructose Ox_Phos ADP TCA Sucrose ATP Galactose
CACNA1I PIK3CA FYN PIK3CA GYG1 MAP3k11 CACNA1I CACNG2
PLCB2 FGFR1 ITGA2B CACNG1 FYN CACNA2D2 ITGA2B NA
CACNG1 PIK3R1 PIK3CA PIK3C2G NA PIK3R5 NA NA
CACNA2D2 PIK3C2G PIK3R1 NA NA CACNG1 NA NA
MAP3K11 PIK3R5 PIK3R5 NA NA NA NA NA
NA NA MAP3k11 NA NA NA NA NA
NA NA CACNA1I NA NA NA NA NA
NA NA ITGA2B NA NA NA NA NA
NA NA FGFR1 NA NA NA NA NA
NA NA NA NA NA NA NA NA
NA PIK4CA NA NA NA NA NA NA
NA FGFR7 NA NA NA NA NA NA
NA PIK4R2 NA NA NA NA NA NA
NA PIK5C3G NA NA NA NA NA NA
NA PIK4R6 NA NA NA NA NA NA

我认为这可以通过 dplyr 轻松完成,但我只是不确定如何保留唯一列。提前致谢。任何帮助都会很棒

【问题讨论】:

  • 最后一个数据集有一个唯一的列ADP,在任何其他数据集中都不存在。这种情况下的合并规则是什么?
  • @Brian “我希望它成为自己独特的专栏。” 这没有意义。如果您没有用于合并来自两个数据集的条目的通用键/列,则无法合并。
  • @Brian Combine如何?这正是我的问题。规则是什么?
  • @MauritsEvers 的观​​点是没有明确的方法可以将ADP 列添加到其余数据中。其他集中的行可以在公共列上匹配,但您的示例依赖于隐含的假设,即ADP 中的行对应于您的第一个数据集中的行。 (此外,您所需的输出中还存在 Fructose 的值,这些值未包含在您的任何数据集中。)
  • 也许还可以看看this post 以更好地了解不同类型的连接(合并)。

标签: r dplyr


【解决方案1】:

你没有解释你打算如何将最后一个没有公共键的数据集与任何其他数据集合并,所以我将在下面的示例中省略第四个数据集。

要合并三个数据集,我们可以使用dplyr::full_join,它执行完全外连接并通过公共键自动提取和合并条目。

Reduce(dplyr::full_join, list(df1, df2, df2))
#   Glucose Fructose Ox_Phos  TCA  Sucrose     ATP
#1  CACNA1I   PIK3CA     FYN GYG1  MAP3k11 CACNA1I
#2    PLCB2    FGFR1  ITGA2B <NA> CACNA2D2  ITGA2B
#3   CACNG1   PIK3R1  PIK3CA <NA>     <NA>    <NA>
#4 CACNA2D2  PIK3C2G  PIK3R1 <NA>     <NA>    <NA>
#5  MAP3K11   PIK3R5  PIK3R5 <NA>     <NA>    <NA>
#6     <NA>     <NA>   FGFR1 <NA>   PIK3R5    <NA>
#7     <NA>     <NA>    <NA> <NA>   CACNG1    <NA>

样本数据

df1 <- read.table(text =
    "Glucose Fructose Ox_Phos
CACNA1I PIK3CA FYN
PLCB2 FGFR1 ITGA2B
CACNG1 PIK3R1 PIK3CA
CACNA2D2 PIK3C2G PIK3R1
MAP3K11 PIK3R5 PIK3R5", header = T, stringsAsFactors = F)

df2 <- read.table(text =
    "TCA Ox_Phos Sucrose ATP
GYG1 FYN MAP3k11 CACNA1I
NA ITGA2B CACNA2D2 ITGA2B
NA FGFR1 PIK3R5 NA
NA NA CACNG1 NA", header = T, stringsAsFactors = F)

df3 <- read.table(text =
    "Fructose Galactose
PIK3CA CACNG1
FGFR1 NA
PIK3R1 NA
PIK3C2G NA
PIK3R5 NA", header = T, stringsAsFactors = F)

【讨论】:

  • 您好,非常感谢您的帮助。我刚刚进入 R 并且我确实对术语有点挣扎。你写的很完美。我真的很感激帮助。如果没有你的帮助,我无法解决这个问题,所以我真的很感激。
  • 不用担心@Brian;是的,术语肯定会令人困惑;也去过那里;-) 看看我上面给出的不同连接的链接;里面有很多有用的信息。祝你工作顺利!
  • 我现在把它们拉起来了。非常感谢。我真的很感谢你为我坚持下去
  • 再次欢迎您@Brian;不要担心投反对票,坚持下去!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2021-06-28
  • 1970-01-01
  • 2013-08-19
相关资源
最近更新 更多