如何在不丢失数据的情况下合并多个数据帧

时间:2019-03-18 01:30:54

标签: r

我可以合并两个数据

df1 <- read.table(text="info   var1m pos_var1
1       C001        NA       NA
2       C002        NA       NA
3       C003 0.1790000        1
4       C004        NA       NA
5       C007 0.0645000        1
6       C010 0.3895000        1
11      C016 0.2805000        1
12      C017 0.7805001        1", header=T, stringsAsFactors=F)
and this

df2 <- read.table(text="info   var1  var2
1      C003 0.1790 1.1305
2      C007 0.0645 0.2985
3      C010 0.3895 0.1705
4      C016 0.1740 0.3980
5      C017 0.4840 0.3375
6      C022 0.1740 0.3980
7      C023 0.4840 0.3375", header=T, stringsAsFactors=F)

df3 <- read.table(text="info   var1  var2
5      C017 0.4840 0.3375
6      C022 0.1740 0.3980
7      C023 0.4840 0.3375", header=T, stringsAsFactors=F)

我仅举一个我要组合的三个数据集的示例。我不应该将它们两三结合起来,因为那样我会丢失一些信息

例如,为了将其中的两个结合在一起,我可以执行以下操作

mydf <- inner_join(df1,df2,'info')

然后将第三,第四等数据集合并到其中。但是,如果我在df1,df2中没有相互数据并合并,它将被丢弃,但在df1和df3中可能有相似的数据。

有没有一种方法,我可以在不丢失信息的情况下合并尽可能多的数据,但可以保留所有数据中的所有共同信息?

1 个答案:

答案 0 :(得分:1)

library(dplyr)
mydf <- df1 %>%
  full_join(df2) %>%
  full_join(df3)

输出:

> mydf
   info     var1m pos_var1   var1   var2
1  C001        NA       NA     NA     NA
2  C002        NA       NA     NA     NA
3  C003 0.1790000        1 0.1790 1.1305
4  C004        NA       NA     NA     NA
5  C007 0.0645000        1 0.0645 0.2985
6  C010 0.3895000        1 0.3895 0.1705
7  C016 0.2805000        1 0.1740 0.3980
8  C017 0.7805001        1 0.4840 0.3375
9  C022        NA       NA 0.1740 0.3980
10 C023        NA       NA 0.4840 0.3375