代码之家  ›  专栏  ›  技术社区  ›  neuron

如何合并大小不等的数据集[重复]

  •  -4
  • neuron  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我有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可以很容易地做到这一点,但我不知道如何保持独特的专栏。提前谢谢。任何帮助都会很棒的

    1 回复  |  直到 7 年前
        1
  •  2
  •   Maurits Evers    7 年前

    您没有解释如何计划将最后一个没有公共键的数据集与任何其他数据集合并,因此我将在下面的示例中省略第四个数据集。

    要合并这三个数据集,我们可以使用 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)