如何合并大小不相等的数据集

时间:2018-07-06 12:17:35

标签: r dplyr

我有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 个答案:

答案 0 :(得分:2)

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

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